我通过以下代码练习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签名进行打印.
你应该设置j到len-1为第一个变化,否则你所访问s的内容之外.更准确地说,s[len]将是一个NUL(或字符\0),因为这是字符串存储在C中的方式.它将与第一个元素交换s,有效地使它成为零长度字符串/空字符串.
其次,格式应该是 printf("\nReverse string is %s", s);
此外,你应该r在返回它之前分配给某些东西(s可能是?),否则当你尝试将它用作指针时,它将被初始化为乱码并导致问题.