기본 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언어는 모던한 언어들에 비하면 저급요소를 많이 가지고 있는 만큼 메모리 처리시 신중하게 해야 합니다.

    • 좋은 지적 감사합니다 맨날 해도 헷깔려서 글을 올렸는데 말씀해주셔서 감사합니다!! 해결 되었습니다!! 알 수 없는 사용자 2019.2.11 16:33

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)