gpt4 book ai didi

c - 为什么我会得到 Seg-Fa

转载 作者:行者123 更新时间:2023-11-30 20:52:58 25 4
gpt4 key购买 nike

所以我对这个一般性问题表示歉意。我找不到任何适合我的具体情况的内容。如果有什么东西我错过了,我很抱歉。

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

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 测试它时它编译得很好,但在运行时我遇到了段错误。

我做错了什么?

最佳答案

您的代码有两个问题(除了这个 j =; 内容。

  1. 在第一个 while 之后,j 指向字符串末尾后的 '\0',而不是字符串的最后一个字符。
  2. 第二个条件确实可以处理 j - i 最初为奇数的情况。例如,如果 i 最初为 0j1,则在第一次迭代后, i 将是 1j 将是 0,因此条件仍然为 true。

这是固定代码:

char *ft_strrev (char *str)
{
int i = 0, j = 0;
while (str [j] != '\0') j++;
while (i < --j) {
char t = str [i];
str [i++] = str [j];
str [j] = t;
}
return str;
}

关于c - 为什么我会得到 Seg-Fa,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55301345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com