在没有库函数的情况下反转字符串c会导致Sequentation错误
每当我尝试运行此程序时,都会出现分段错误。不知道为什么。逻辑似乎是正确的,它可能与函数调用有关。调试器说了一些关于堆栈的内容,但我不知道如何解释它在没有库函数的情况下反转字符串c会导致Sequentation错误,c,C,每当我尝试运行此程序时,都会出现分段错误。不知道为什么。逻辑似乎是正确的,它可能与函数调用有关。调试器说了一些关于堆栈的内容,但我不知道如何解释它 char* rev_string(char* t) { int i; int j; i = j = 0; char tmp; while(t[i] != '\0') i++; while(i > j) { tmp = t[i]; t[i] =
char* rev_string(char* t)
{
int i;
int j;
i = j = 0;
char tmp;
while(t[i] != '\0')
i++;
while(i > j)
{
tmp = t[i];
t[i] = t[j];
t[j] = tmp;
i--;
j++;
}
return t;
}
我认为您正在将第一个字符与字符串末尾的空终止字符交换,导致字符串的长度为0,因为第一个字符是
\0
。一旦找到\0
,您需要将j
标记向后移动一次
char* rev_string(char* t)
{
int i;
int j;
i = j = 0;
char tmp;
while(t[i] != '\0')
i++;
i--;
while(i > j)
{
tmp = t[i];
t[i] = t[j];
t[j] = tmp;
i--;
j++;
}
return t;
}
它说的“某物”是什么?你真的尝试过使用调试器吗?观察i和ji当第一个循环结束时,
t[i]
将等于零,因此,即使进程成功,您在开始时也会有一个空终止符。您需要显示一个。我猜您是在字符串文本上调用此函数,但如果您不显示如何调用它,我们将永远无法知道。另外,告诉我们调试器实际显示了什么而不是“关于堆栈的内容”怎么样?如果是,这不会导致segfault。问题的状态是“没有库函数”,因此我假设strlen会违反不使用库函数的规则