c语言 - 为什么我会得到"Access violation"写作位置?



我正在尝试使用strtok来获得具有的字符串,而不是使用空格来将替换为#,因此我使用strtok。但我得到了-访问违规写入位置在这条线上-char* word = strtok(stringOfNumberSign, delimiters);

char* addNumberSignToString(char* stringOfNumberSign)
{
int numOfWords = 0;
char* delimiters = " ";
char* word = strtok(stringOfNumberSign, delimiters);
while (word)
{   
numOfWords++;
word = strtok(NULL, delimiters);
}
return stringOfNumberSign;
}
int main()
{
char* stringForNumberSign = "welcome to hello world";
char* result;
result = addNumberSignToString(stringForNumberSign);
printf("%s", result);
}
函数strtok更改传递的字符串。

来自C标准(7.23.5.8 strtok函数(

4然后strtok函数从中搜索一个字符包含在当前分隔符字符串中。如果没有这样的字符找到时,当前令牌扩展到所指向的字符串的末尾到s1,随后对令牌的搜索将返回一个空指针。如果找到这样的字符,它将被一个null字符覆盖,从而终止当前令牌strtok函数保存指向以下字符的指针,下一次搜索令牌将启动。

但是,您不能更改字符串文字。任何更改字符串文字的尝试都会导致未定义的行为。

来自C标准(6.4.5字符串文字(

7未指定这些数组是否不同元素具有适当的值如果程序试图修改这样的数组,行为是未定义的

您正试图更改字符串文字

char* stringForNumberSign = "welcome to hello world";
//...
result = addNumberSignToString(stringForNumberSign);

至少您应该使用字符数组而不是字符串文字

char stringForNumberSign[] = "welcome to hello world";

请注意,你的功能是没有意义的。

相关内容

最新更新