gpt4 book ai didi

字符串操作中的 C 段错误

转载 作者:行者123 更新时间:2023-11-30 20:32:30 26 4
gpt4 key购买 nike

我正在编写一个小程序来从字符串中删除一个单词。 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;
}

最佳答案

它是字符串文字。你无法修改它。结果,您在尝试修改它时遇到了段错误。(实际上,这是未定义的行为)。

你能做的是

char  term[] = "from the ";

这将帮助您修改它,这就是您想要的。

即使您可以使用 char* 并在其中分配内存并复制字符串,但这对于此任务来说是一种过大的杀伤力。

从标准中可以引用§6.4.5

It is unspecified whether these arrays are distinct provided their elements have the appropriate values. If the program attempts to modify such an array, the behavior is undefined.

在您的情况下 temp 基本上保存了不可修改的字符串文字的地址。如果您复制它,那么它就可以修改。

关于字符串操作中的 C 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47347991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com