첫번째꺼도 괜찮진 않아 const를 붙히도록 해라 두번째꺼가 문자열 복사 의미면 strncpy를 사용하도록 해라
익명(77.245)2015-05-21 19:15
윗 놈 말이 맞음. "..."로 표현되는 string literal(문자열 상수)은 일반적으로 read-only 메모리에 담기기 때문에 그 안의 문자를 수정하려고 하면 오류가 나므로 string literal을 취급할 때는 const char * 형으로 취급하는 게 좋음. 두번째 식은 문법이 잘못되었다기 보단 str를 수정하면 str2가 가리키는 문자열도 고쳐지기 때문에 문제가 있음. 저 경우는 strdup()를 써라.
ㅅㅅㅅ(125.128)2015-05-21 19:17
그럼 const char * str = "aaa"로하는게좋음?
ㅁㅁ(112.144)2015-05-21 19:24
ㅇㅇ 당연. 윈도우 API 프로그래밍에서 괜히 LPCSTR(const char *) 타입을 밥 먹듯이 쓰는 게 아님. 아 strdup() 함수 모르면 내가 새로 올린 글을 참고해라.
ㅅㅅㅅ(125.128)2015-05-21 19:25
아 또 미스터리인게 있는데 왜 문자열 상수의 타입은 const char * str 임? 문자열도 결국 주소인데 문자열을 변경 못하게 할려면 char * const str이 더 적절한 표현 아님?
ㅁㅁ(112.144)2015-05-21 19:28
const char *는 상수 문자의 포인터인 거고, char *const는 문자 포인터가 상수인 거고. 전자는 문자 데이터를 수정하는 걸 막고 후자는 포인터 주소 값만 상수화시키지 문자 데이터는 보호를 안 함.
ㅅㅅㅅ님이상세히설명해주실겁니다
첫번째꺼도 괜찮진 않아 const를 붙히도록 해라 두번째꺼가 문자열 복사 의미면 strncpy를 사용하도록 해라
윗 놈 말이 맞음. "..."로 표현되는 string literal(문자열 상수)은 일반적으로 read-only 메모리에 담기기 때문에 그 안의 문자를 수정하려고 하면 오류가 나므로 string literal을 취급할 때는 const char * 형으로 취급하는 게 좋음. 두번째 식은 문법이 잘못되었다기 보단 str를 수정하면 str2가 가리키는 문자열도 고쳐지기 때문에 문제가 있음. 저 경우는 strdup()를 써라.
그럼 const char * str = "aaa"로하는게좋음?
ㅇㅇ 당연. 윈도우 API 프로그래밍에서 괜히 LPCSTR(const char *) 타입을 밥 먹듯이 쓰는 게 아님. 아 strdup() 함수 모르면 내가 새로 올린 글을 참고해라.
아 또 미스터리인게 있는데 왜 문자열 상수의 타입은 const char * str 임? 문자열도 결국 주소인데 문자열을 변경 못하게 할려면 char * const str이 더 적절한 표현 아님?
const char *는 상수 문자의 포인터인 거고, char *const는 문자 포인터가 상수인 거고. 전자는 문자 데이터를 수정하는 걸 막고 후자는 포인터 주소 값만 상수화시키지 문자 데이터는 보호를 안 함.
아 땡큐
http://autogram.tk/이
중고차 어플리케이션 어떤가요?