我正在尝试在visual studio代码上运行此代码,但它无法运行。如果我没有使用string.h中的任何内容并且只打印一个字符串,它就可以找到但是一旦我使用strtok这样的方法,文件就会编译但是在运行和/或运行.exe时没有显示任何内容,我得到了它已停止工作的错误消息。我已经为C安装了基础mingw包。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
int main(int argc, char* argv[])
{
char* string = "Visual Studio Code";
strtok(string, " ");
printf(string);
return 0;
}
这是我的c_cpp_properties.json文件,其中包含了诸如string.h等库。
{
"name": "Win32",
"includePath": [
"${workspaceRoot}",
"C:\\MinGW\\lib\\gcc\\mingw32\\6.3.0\\include",
"C:\\MinGW\\lib\\gcc\\mingw32\\6.3.0\\include-fixed",
"C:\\MinGW\\include"
],
答案 0 :(得分:1)
指针string
指向字符串文字。这些不可写,实际上通常存在于只读存储器部分。 strtok
函数修改传递给它的字符串。因为它试图修改字符串文字,所以您调用未定义的行为,在这种情况下会导致应用程序崩溃。
您需要创建一个可以修改的数组。
char string[] = "Visual Studio Code";
答案 1 :(得分:1)
从标准7.24.5.8
然后strtok函数从那里搜索一个字符 包含在当前分隔符字符串中。如果没有这样的角色 发现,当前令牌延伸到指向的字符串的末尾 通过s1,后续搜索令牌将返回空指针。 如果找到这样的字符,则会被空字符覆盖, 它终止当前令牌。 strtok函数保存了一个 指向以下字符的指针,从中搜索下一个字符 令牌将开始。
字符串文字是不可修改的,你将它传递给尝试修改它的strok。这是未定义的行为。在你的情况下你有分段错误。
char string[] = "Visual Studio Code";