strtok中的分段错误(核心转储)

时间:2011-08-03 17:38:51

标签: c

  

可能重复:
  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 [] =“有一个。很好,一天:)”;它给了我输出。为什么我得到错误,即使strtok定义是char * strcpy(char *,const char *)???〜

2 个答案:

答案 0 :(得分:4)

strtok修改参数,str指向字符串文字,修改字符串文字导致未定义的行为。实际上不推荐使用字符串文字初始化非const char*

当您编写str[]时,str将成为使用字符串初始化的可变数组。

答案 1 :(得分:0)

strtok修改传递给它的字符串。我怀疑它与char * =“literal string”有关,它给你一个指向.data部分中字符串的指针,而char [] =“literal string”在堆栈上分配一个缓冲区,并复制初始内容来自.data部分。