在没有库函数的情况下反转字符串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会违反不使用库函数的规则