c - 为什么在给定 *string 时 strtok 会出现段错误,而在给定 string[] 时却不会?

标签 c strtok

<分区>

考虑下面的程序

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

int main() {
    char *str = "This is a test.";
    char *token;

    token = strtok(str," ");
}

它会发生段错误。但是,如果我将 *str 更改为 str[80],它不会。这是为什么?

谢谢

最佳答案

问题是类型不对。

char *str = "This is a test.";

它可能会说 char* 但右边的实际上是 char const* (C 在允许类型双关方面非常宽松(这是正确的词))。任何修改 const 的尝试都是未定义的行为。

函数 strtok() 实际上修改了底层字符串(通过插入 '\0'),所以这是未定义的行为。

边做边修。

char str[] = "This is a test.";

关于c - 为什么在给定 *string 时 strtok 会出现段错误,而在给定 string[] 时却不会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34779049/

相关文章:

crash - C while循环计算利息

c - C语言中strtok的使用

c - 将指针附加到 pthread

c - 提取数据后 GPRMC 字符串未显示 - C

c - Eratosthenes Prime (C) 的 Valgrind 错误

c - valgrind 显示内存较大的 strtok 错误

c++ - 使用 strtok 拆分 C 字符串

c - 将字符串拆分为标记

c - 从文件中读取字符串,将它们转换为整数,然后将它们放入 C 中的数组中

c++ - 从 C 源代码调用 C++ 函数