我正在通过以下代码练习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/