2011-08-03 4 views
0

가능한 중복 :
Memory Allocation char* and char[]세그멘트 오류 (덤프 코어)

왜 다음과 같은 프로그램이 실행 시간에 분할 오류를 주는가?

#include <stdio.h> 
#include <string.h> 
#include <malloc.h> 

main() 
{ 
    char * str = "Have a. nice, day :)"; 
    char * ptr; 

    ptr = strtok(str, " .,"); 

    printf("%s",ptr); 
} 

하지만 char str [] = "Have a nice, day :)"를 사용하면; 그것은 나에게 결과를 준다. strtok 정의가 char * strcpy (char *, const char *) 인 경우에도 오류가 발생하는 이유는 무엇입니까?

답변

4

strtok은 문자열 리터럴에 대해 str이 인수를 수정하면 인수가 수정되므로 정의되지 않은 동작이 발생합니다 . 비 const의 char*을 문자열 리터럴로 초기화하는 것은 실제로 사용되지 않습니다.

str[]을 쓸 때 str은 문자열로 초기화 된 가변 배열이됩니다.

0

strtok는 전달 된 문자열을 수정합니다. 나는 그것이 char * = "literal string"과 관련이 있다고 생각하는데, char [] = "literal string"은 스택에 버퍼를 할당하고 .data 섹션의 문자열에 대한 포인터를 제공한다. . 데이터 섹션.

관련 문제