c - 段错误,我不知道为什么

标签 c

我的老师告诉我们写一个程序,在取出连续的空格后给出字符串的长度,并且只使用一个空格。例如,如果我写“hello(space)(space)(space)world”,它应该返回“hello world”,长度应该是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;

}

最佳答案

"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;

}

关于c - 段错误,我不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49693196/

相关文章:

java - Android JNI 和 NewGlobalRef

c - 如何在linux中找到一个函数的实现?

C switch case 值不能在 switch 内修改(不是常量)

c++ - 如何编写C .so 库来替代现有的C++ .so 库?

c - `for`循环测试表达式中的数学运算-性能、优化

c - C 中函数参数的放置

c - 提取最小元素后的最小堆问题

无法理解为什么将变量 i 设置为零?

c - C语言和冯诺依曼体系结构有什么关系?

c - 为什么 sem_wait 在 mac OSX 上不等待信号量?