好吧所以我只是想知道为什么我的程序一直在崩溃,所有我想要做的就是循环指向一个char数组并用新的字符替换旧字符并返回我替换它的次数: / p>
int main(void) {
char *s = "hello";
printf("%lu\n",str_replace_all(s,'e','f'));
printf("%s",s);
return 0;
}
size_t str_replace_all(char *s,int oldc,int newc) {
size_t count = 0;
for(;*s != '\0'; s++) {
if(*s == oldc) {
*s = newc;
count++
}
}
return count;
}
这与gcc -ansi -W -Wall -pedantic
编译良好,但是当我运行它时会崩溃:
Segmentation fault (core dumped)
我需要帮助搞清楚最新情况,谢谢!
P.S预期产量为hfllo
答案 0 :(得分:3)
您正在尝试修改文字字符串,这会产生未定义的行为。将声明更改为:
char s[] = "hello";
答案 1 :(得分:0)
您遇到分段错误的原因是没有为变量s分配内存。它只是一个指向某个地址位置的指针。可能的解决方案是char s [] ="你好"或者你可以在堆中分配一些内存和memcpy或strcpy"你好"到char指针。然后你的代码将工作。希望它能清除这个概念。 :)