2011-08-03 88 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部分。