分段错误,我不知道为什么

时间:2018-04-06 12:48:45

标签: c

我的老师告诉我们编写一个程序,在取出连续的空格后应该给出一个字符串的长度,并且只使用一个空格。例如,如果我写“你好(空间)(空间)(空间)世界”它应该返回“你好世界”,长度应该是11.问题是我不断得到分段错误,我不知道为什么?有人可以向我解释一下吗?谢谢顺便说一句!

int limpaEspacos (char t[]){

int i, j, w=0;
char c;
for(i=0;t[i];i++){

    t[w]=t[i];
    w++;

    for(j=i;t[j];j++,i++){

        if (t[j]!=' ') {break;}
       }
    }

  t[w]='\0';

  return w;
}


int main () {
int a;

a= limpaEspacos ("b   ruh");

printf("%d\n", a );

return 0;

}

1 个答案:

答案 0 :(得分:0)

"b ruh"是一个常量字符串文字,你不能修改它。这就是你得到分段错误的原因。

以下是经过修正的颂歌,现在可以使用:

#include <stdio.h>
#include <stdlib.h>

int
limpaEspacos (char t[])
{

  int i, j, w = 0;
  char c;
  for (i = 0; t[i]; i++)
    {

      t[w] = t[i];
      w++;

      for (j = i; t[j]; j++, i++)
    {

      if (t[j] != ' ')
        {
          break;
        }
    }
    }

  t[w] = '\0';

  return w;
}


int
main ()
{
  int a;
  char str[100] = "b   ruh";    // code change
  a = limpaEspacos (str);

  printf ("%d\n", a);

  return 0;

}