C中的字符串反转意外输出

C中的字符串反转意外输出,c,C,这段代码看起来像是要反转字符串,但它只反转第一个字符,输出为:-delloworlh 你知道为什么会这样吗 int main() { char p[] = "helloworld"; char t; int i, j; for(i=0,j=(strlen(p)-1); i<j; i++) { t = p[i]; p[i] = p[j-i]; p[j-i] = t; } printf(

这段代码看起来像是要反转字符串,但它只反转第一个字符,输出为:-delloworlh

你知道为什么会这样吗

int main()
{

    char p[] = "helloworld";
     char t;
    int i, j;
    for(i=0,j=(strlen(p)-1); i<j; i++)
    {
        t = p[i];
        p[i] = p[j-i];
        p[j-i] = t;
    }
    printf("%s", p);
    return 0;
}

将循环条件语句更改为i在循环中,使用条件:i更改为

for(i=0,j=(strlen(p)-1); i<j; i++,--j)
{
    t = p[i];
    p[i] = p[j];
    p[j] = t;
}

是的,对。但是我看了5分钟这个代码,问我,为什么他这样做这么昂贵的方式。更简单的方法是创建一个新数组并反向填充它。。但是如果我们创建一个新的数组,它会增加空间复杂度。请选择您的答案。
for(i=0,j=(strlen(p)-1); i<j; i++,--j)
{
    t = p[i];
    p[i] = p[j];
    p[j] = t;
}