我为什么要收到Seg-Fa

时间:2019-03-22 14:04:30

标签: c

因此,我对一般性问题表示歉意。我还找不到任何能说明我具体情况的东西。如果有东西我错过了,对不起。

我正在编写一个反转字符串的函数。这是一个带有一些非常具体的准则的项目。我不允许使用任何函数,例如malloc,printf等,并且我的函数需要返回作为参数传入的字符串。该函数的原型如下:

char *ft_strrev(char *str);

这是我的功能:

char *ft_strrev(char *str)
{
     int i;
     int j;
     char c;

     i = 0;
     j = ;
     c = '0';
     while(str[j] != '\0')
         j++;
     while(i != j)
     {
         c = str[i];
         str[i] = str[j];
         str[j] = c;
         i++;
         j--;
     }    
}

当我在main中调用它并使用putstr https://github.com/kigiri/userpref/blob/master/ft_42/ft_putstr.c对其进行测试时,它可以很好地编译,但是在运行时会遇到段错误。

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

您的代码有两个问题(除了j =;之外。

  1. 在第一个while之后,j指向字符串末尾的'\0',而不是字符串的最后一个字符。
  2. 第二外观的条件确实可以解决j - i最初为奇数的情况。例如,如果i最初是0,而j1,那么在第一次迭代之后,i将是1和{{ 1}}将为j,因此条件仍然为真。

这里是固定代码:

0