기본 c문법 문자열 세그멘테이션 오류에 대한 질문입니다.
조회수 973회
char* Req_topic[] = {0,};
char Req_topic_SerialNumber[] = {0,};
strcat(Req_topic_SerialNumber , "qqq/aaa/bbb/");
strcat(Req_topic_SerialNumber, SERIALNUM);
strcat(Req_topic_SerialNumber , "/cccc");
printf("111\n");
Req_topic[0] = Req_topic_SerialNumber;
printf("222\n");
printf("Req_topic : %s\n", Req_topic);
printf("333\n");
위와 같이 컴파일(g++) 하고 난뒤에 프로그램 실행시
111
222
Req_topic : ` vvbbb/SERIALNUM/cccc
333
./mm: line 3: 3783 세그멘테이션 오류 이렇게 실행이 되는데 왜앞의 문자열은 깨지고 오류가 나는지 이해가 안가서 질문올립니다....
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
기본적으로 c언어는 문자열 처리가 힘듭니다.
c++만 가도 string 클래스가 제공되니 그나마 낫지만...c는 다루기가 힘듭니다.
char* Req_topic[] = {0,}; char Req_topic_SerialNumber[] = {0,};
위와 같이 초기화를 하면 안됩니다.
char Req_topic_SerialNumber[255]; // 255 문자 할당 가능하도록 메모리 확보
위와 같이 버퍼를 확보하고 문자열을 추가해야 합니다. 그래야 세그멘테이션 폴트가 발생을 안합니다.
버퍼 확보를 안하면 엉뚱한 영역에 문자열이 추가되면서 buffer overflow 가 발생하여 문제가 됩니다.
아랫부분도 수정되어야 합니다.
printf("Req_topic : %s\n", Req_topic[0]);
c언어는 모던한 언어들에 비하면 저급요소를 많이 가지고 있는 만큼 메모리 처리시 신중하게 해야 합니다.
댓글 입력