<分区>
考虑下面的程序
#include <stdio.h>
#include <string.h>
int main() {
char *str = "This is a test.";
char *token;
token = strtok(str," ");
}
它会发生段错误。但是,如果我将 *str 更改为 str[80],它不会。这是为什么?
谢谢
<分区>
考虑下面的程序
#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/