c - c 中带有指针的 strtok 函数出现意外错误

标签 c visual-studio-2012 strtok

<分区>

我只是想了解下面的 strtok() 函数是如何工作的:

#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(){
    char* p="abc,def,ghi,jkl,mno,pqr,stu,vwx,yz";
    char* q=strtok(p, ",");
    printf("%s", q);

    return 0;
}

我试图运行这个简单的代码,但我不断收到一个我根本无法理解的奇怪错误。 这是我不断收到的错误:

screen shot

这可能不相关,但因为我的命令提示符不断退出,我更改了项目中的一些设置并添加了这一行 Console (/SUBSYSTEM:CONSOLE) 某处,我尝试运行程序而不调试首先,它甚至没有运行程序,然后我尝试调试它,这就是我在链接中得到错误的原因。

最佳答案

代替

char* p="abc,def,ghi,jkl,mno,pqr,stu,vwx,yz";

使用

char p[] = "abc,def,ghi,jkl,mno,pqr,stu,vwx,yz";

因为,根据 man page strtok(),它可能会修改输入字符串。在您的代码中,字符串文字是只读。这就是它产生段错误的原因。

相关引用:

Be cautious when using these functions. If you do use them, note that:

* These functions modify their first argument.

关于c - c 中带有指针的 strtok 函数出现意外错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27488731/

相关文章:

c - stm32 上的半主机

c++ - 从 this->class 构造函数调用类构造函数(不同的参数)?

c - 使用特定的多字节定界符标记字符串

c - C中获取字符串第一个元素的第一个元素

c - 为什么这个函数会导致段错误?

c - 如何将随机整数的范围从1-10扩大到1-200

python - 使用 PTVS、IronPython 和 MongoDB

c# - Dotfuscator 和 VS2012

c - 将文件中的字符串拆分为c中的数组

c - 为什么 qsort 不能在我的代码中工作?