返回指向C中char数组的指针

sni*_*tko 6 c arrays chars

我已经在StackOverflow上看到了很多关于它的问题,但是阅读答案并没有为我清楚,可能是因为我是C编程的新手.这是代码:

#include <stdio.h>

char* squeeze(char s[], char c);

main()
{
  printf("%s", squeeze("hello", 'o'));
}

char* squeeze(char s[], char c)
{
  int i, j;

  for(i = j = 0; s[i] != '\0'; i++)
    if(s[i] != c)
      s[j++] = s[i];
    s[j] = '\0';

  return s;
}
Run Code Online (Sandbox Code Playgroud)

它编译,我运行它时会出现分段错误.我读过有关返回数组常见问题和尝试,建议有"静态"的技术,但还是没能拿到计划工作.任何人都可以指出它究竟出了什么问题,将来我应该注意什么?

cod*_*ict 6

传递给squeeze函数的第一个参数是一个read-only字符串文字"hello",您试图修改它.

而是传递一个可修改的char数组:

char str[] = "hello";
printf("%s", squeeze(str, 'o'));
Run Code Online (Sandbox Code Playgroud)