2011-08-03 247 views
0

可能重複:
Memory Allocation char* and char[]Segementation故障(核心轉儲)

爲什麼下面的程序給在運行時分段故障?

#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 [] =「有一個很好的一天:)」;它給了我輸出。爲什麼即使strtok定義是char * strcpy(char *,const char *)???我也得到這個錯誤〜

回答

4

strtok修改參數str指向一個字符串,修改一個字符串會導致未定義的行爲。使用字符串文字初始化非const char*實際上已被棄用。

當你編寫str[]時,str變成一個用字符串初始化的可變數組。

0

strtok修改傳遞給它的字符串。我懷疑它與char * =「literal string」有關,它會給你一個指向.data部分字符串的指針,而char [] =「literal string」在堆棧中分配一個緩衝區,並將初始內容從.data部分。