while循环中的语句不会运行

dou*_*leE -2 c

我通过以下代码练习C:

char* streverse(char* s){
    int len=strlen(s);
    int i=0; int j=len;
    char* r;

    while(i<j){
        s[i]=s[j];
        i++; j--;
    }
    printf("\nReverse string is %s",s);
    return r;
}
Run Code Online (Sandbox Code Playgroud)

但printf永远不会执行.如果我删除:

s[i]=s[j];
Run Code Online (Sandbox Code Playgroud)

printf执行.这很奇怪,因为尽管循环结束,但无论如何都与上述分配无关.任何线索为什么printf不执行上述赋值?

编辑:

现在通过更正printf签名进行打印.

Hor*_*man 5

你应该设置jlen-1为第一个变化,否则你所访问s的内容之外.更准确地说,s[len]将是一个NUL(或字符\0),因为这是字符串存储在C中的方式.它将与第一个元素交换s,有效地使它成为零长度字符串/空字符串.

其次,格式应该是 printf("\nReverse string is %s", s);

此外,你应该r在返回它之前分配给某些东西(s可能是?),否则当你尝试将它用作指针时,它将被初始化为乱码并导致问题.

  • _`s [len]`将是一个`NULL` _...不是真的.`NULL`不是`null终止符`. (2认同)