Strtok segfault

two*_*e88 3 c

可能重复:
strtok给出分段错误

为什么我使用此代码获得段错误?

void test(char *data)
{
    char *pch;
    pch = strtok(data, " ,.-"); // segfault
    while (pch != NULL)
    {
        printf("%s\n", pch);
        pch = strtok(NULL, " ,.-");
    }

    return NULL;
}

char *data = "- This, a sample string.";
test(data);
Run Code Online (Sandbox Code Playgroud)

Mat*_*att 16

strtok()修改原始字符串.您正在传递一个无法修改的常量源字符串.

试试这个:

char *data = strdup("- This, a sample string.");
test(data);
Run Code Online (Sandbox Code Playgroud)

  • 或者只是`char data [] =" - 这是一个示例字符串.";` (7认同)
  • 另请注意,`strdup`不是ANSI C的一部分,而是POSIX. (3认同)
  • 这会产生内存泄漏,除非你记得在完成后释放数据. (2认同)