c - while 循环之外的语句不运行

标签 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;
}

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

s[i]=s[j];

printf 执行。这很奇怪,因为 while 循环无论如何都会结束,与上面的赋值无关。有任何线索说明为什么 printf 在存在上述赋值的情况下不执行吗?

编辑:

通过更正 printf 签名,现在可以打印了。

最佳答案

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

其次,格式应该是 printf("\n反向字符串是 %s", s);

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

关于c - while 循环之外的语句不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39463972/

相关文章:

c - 使用 C 时面对 'invalid operands to binary expression (' float' 和 'float' )'

c++ - C:数据结构对齐

C: 函数可以返回一个全局变量吗?

链表归并排序的复杂性

c - 在 Ruby FFI 中声明 char 数组

c - 如何将新元素添加到 C 中另一个结构数组内部的数组中?

c - Gtk+ 用 C 处理文件

c - 前一天和后一天,C代码

c++ - 自动关闭 MessageBox

c - 在 C 中返回字符串的正确方法