我正在编写一个小程序来从字符串中删除单词。在 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=%dn",str, stringLen, toRemoveLen, i, j);
for(j=i; j<=stringLen - toRemoveLen; j++)
{
printf ("j=%dn", j);
str[j] = str[j + toRemoveLen];
}
printf ("i=%d j=%dn", i, j);
}
int main(void)
{
char * term = "from the ";
removeWord(term, "from");
return 0;
}
字符串文字。您无法修改它。结果,您在尝试修改它时会出现段错误。(实际上这是未定义的行为(。
你能做的是
char term[] = "from the ";
这将帮助您修改它,这是您想要的。
即使你可以拿一个char*
并在其中分配内存并复制字符串,但这对这个任务来说是一个矫枉过正。
从标准中可以引用§6.4.5
未指定这些数组是否不同,前提是它们的 元素具有适当的值。如果程序尝试 修改这样的数组,行为是未定义的。
在您的情况下temp
基本上保存不可修改的字符串文本的地址。如果你复制它,那么这将是可以修改的。