将指针中的字符替换为char数组

时间:2015-07-26 07:48:26

标签: c

好吧所以我只是想知道为什么我的程序一直在崩溃,所有我想要做的就是循环指向一个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

2 个答案:

答案 0 :(得分:3)

您正在尝试修改文字字符串,这会产生未定义的行为。将声明更改为:

char s[] = "hello";

答案 1 :(得分:0)

您遇到分段错误的原因是没有为变量s分配内存。它只是一个指向某个地址位置的指针。可能的解决方案是char s [] ="你好"或者你可以在堆中分配一些内存和memcpy或strcpy"你好"到char指针。然后你的代码将工作。希望它能清除这个概念。 :)