字符串操作上的 C 段错误



我正在编写一个小程序来从字符串中删除单词。在 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基本上保存不可修改的字符串文本的地址。如果你复制它,那么这将是可以修改的。

相关内容

  • 没有找到相关文章

最新更新