我正在编写一个程序来删除字符串中的单词。在removeWord函数内的for循环中的C段错误(第三个printf永远不会被执行)。原因是什么?我是C中的绝对新手。当我尝试在for循环中打印str [j]为%s时,编译器抱怨str是整数,而不是字符串。那是为什么?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void removeWord(char * str, char * toRemove)
{
int i, j, k, stringLen, toRemoveLen;
stringLen = strlen(str); // Length of string
toRemoveLen = strlen(toRemove); // Length of word to remove
// ...(code for finding the word)...
printf ("str='%s' StrLen=%d ToRem=%d i=%d j=%d\n",str, stringLen, toRemoveLen, i, j);
for(j=i; j<=stringLen - toRemoveLen; j++)
{
printf ("j=%d\n", j);
str[j] = str[j + toRemoveLen];
}
printf ("i=%d j=%d\n", i, j);
}
int main(void)
{
char * term = "from the ";
removeWord(term, "from");
return 0;
}
答案 0 :(得分:0)
这是字符串文字。你无法修改它。结果你得到一个试图修改它的段错误。(实际上它是未定义的行为)。
你能做的是
char term[] = "from the ";
这将帮助您修改它,这就是您想要的。
即使您可以使用char*
并在其中分配内存并复制字符串,但这对此任务来说太过分了。
从标准中可以引用§6.4.5
未指明这些数组是否与它们不同 元素具有适当的值。 如果程序尝试 修改这样的数组,行为是未定义的。
在你的情况下,temp
基本上保存了不可修改的字符串文字的地址。如果你复制它然后可以修改。