因此,我对一般性问题表示歉意。我还找不到任何能说明我具体情况的东西。如果有东西我错过了,对不起。
我正在编写一个反转字符串的函数。这是一个带有一些非常具体的准则的项目。我不允许使用任何函数,例如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对其进行测试时,它可以很好地编译,但是在运行时会遇到段错误。
我在做什么错了?
答案 0 :(得分:2)
您的代码有两个问题(除了j =;
之外。
while
之后,j指向字符串末尾的'\0'
,而不是字符串的最后一个字符。j - i
最初为奇数的情况。例如,如果i
最初是0
,而j
是1
,那么在第一次迭代之后,i
将是1
和{{ 1}}将为j
,因此条件仍然为真。这里是固定代码:
0