<string.h>를 사용하지 않고 strcpy() 함수를 구현하려고 하는데 논리 오류가 발생합니다.
#include <stdio.h>
void strcpy(char*, char*);
int main()
{
char* sen1 = "Hello";
char* sen2 = "Friends";
strcpy(sen1, sen2);
printf("The result: %s\n", sen1);
return 0;
}
void strcpy(char* str1, char* str2)
{
int i = 0;
while (*(str2 + i) != '\0')
{
*(str1 + i) = *(str2 + i);
i++;
}
*(str1 + i) = '\0';
}
strcpy() 함수가 포인터 표현(*(d+i))으로 가리키도록 프로그래밍 하려고 합니다.
프로그램은 비쥬얼 스튜디오를 이용하고 있습니다.
혼자서 구상하다가 구글에도 쳐보고 하면서 여러 가지 다 해봤는데 계속 아래 사진처럼 떠요.
어디를 고쳐야 하는지 알려주세요..
55글자 더 채워주세요.
1개의 답변이 있어요!
strcpy 함수는 문제가 없습니다.
int main() { char dest[8] = "Hello"; const char *source = "Friends"; strcpy(dest, source); printf("The result: %s\n", dest); return 0; }main을 이렇게 수정하면 정상적으로 동작합니다.
질문자님의 코드에서 sen1에 대입한 "Hello"는 const char * 상수 리터럴입니다.
그 문자들이 있는 주소를 가리키고 있지만, 그 곳의 데이터를 수정할 수 없습니다.
strcpy 함수는 str1이 가리키는 곳의 데이터를 수정합니다.
str1에 데이터를 수정할 수 있는 주소를 가리키는 포인터를 넘기면 됩니다.