C 세그멘테이션 오류 질문
글쓴이: alkfjalfja / 작성시간: 일, 2016/01/03 - 2:12오전
코드 분석 중, 값을 찍어보고 싶어 아래와 같은 테스트 코드를 만들었는데.
*(x++) = 0; 에서 문제가 발생하는 것 같습니다.
현재 아래와 동일하게 작성된 다른 코드에서는 문제 없이 작동하는데, 테스트 코드에서 문제가 발생하네요.
혹시 제가 놓친 게 있을까요?
#include
#include
int main()
{
char* user;
char* pass;
char* optarg = "unix:pass";
char* x = (char*)strchr(optarg, ':');
if(!x)
{
printf("error\n");
}
*(x++) = 0;
printf("user = %s\n", optarg);
printf("pass = %s\n", x);
return 0;
}
Forums:
gilgil.net
*(x++) = 0;
라는 코드로 인해서
"unix:pass"
의 ':' 부분이 '\0'로 바뀌게 되는데
해당하는 곳이 write가 가능하지 않는 곳이겠네요.
char* optarg = "unix:pass";
를
char optarg[] = "unix:pass";
로 바꿔 보세요.
www.gilgil.net
감사합니다. 그런데...
그런데
"unix:pass"
의 ':' 부분이 '\0'로 바뀌게 되는데
해당하는 곳이 write가 가능하지 않는 곳이겠네요.
에서, 왜 write 가능하지 않은 곳인지 궁금합니다.
그리고 *(x++) = 0를 하면 :이 \0으로 바뀐다고 하셨는데, \0으로 바뀐다는 의미에 대해서 조금 자세한 설명 좀 부탁 드리겠습니다.
감사합니다.
"unix:pass"라는 문자열 자체가 string
"unix:pass"라는 문자열 자체가 string literal인데, 보통 .rodata와 같은 read only section에 배치되고, 이를 수정하려 할 경우 segfault가 발생합니다.
댓글 달기