작성
·
1.2K
0
밑에서 7번째 문장에 원래 strcpy(p->title, "C Programming"); 이라는 함수 대신에 p->title ="C Programming" 이라고 설정하니 실행이 안됩니다. 왜 실행이 안되는 것인지 이유를 모르겠습니다.
꼭 strcpy 를 써야하는 이유가 있나요?
답변 2
2
구조체 변수를 포함할 수 있는 메모리를 할당할 때 멤버변수가 메모리를 점유하게됩니다.
이때 char title[100]; 이 초기화 되지 않은 상태로 메모리를 점유합니다.
1) p->title="C Programming"; 오류가 나는 이유
해당 구문이 의미하는 것은 p->title에 "C Programming"의 시작주소를 대입하는 것을 의미합니다.
하지만 p->title은 포인터 '상수'로 수정불가능한 Lvalue입니다.
수정 불가능한 Lvalue에 값을 대입하려하니 에러가 발생합니다.
즉, p->title이 가리키는 주소를 바꿀 수 없는 것 입니다.
2) strcpy는 가능한 이유?
strcpy는 아래와 같이 char*, char* 파라미터를 받습니다.
char *strcpy( char *dest, const char *src );
strcpy(p->title, "C Programming"); 는
포인터 변수 dest, src가 각각 p->title의 주소, "C Programming"의 주소를 가리킵니다.
이들을 이용해 포인터 dereferencing을 이용해 src의 각 문자를 dest에 차례로 복사하게됩니다.
0
안녕하세요,
C언어에서는 C++, Java처럼 string을 표현하는 자료형이 없습니다.
그렇기에 특정 변수 (문자 배열)에 문자열을 저장하는 등의 코드를 작성할 적에는
strcpy 등을 이용해 복사를 해야 합니다.
여느 자료형처럼 = 로 할당할 수 없지요.
감사합니다.