因为字符串是以字符‘\0’结束的
str[0]='h';str[1]='e';str[2]='l';str[3]='l';str[4]='o';str[5]='\0';
函数的功能是把str的字符串中的字符全部颠倒
所以就有reverse_str[5]='h';reverse_str[4]='e';reverse_str[3]='l';reverse_str[2]='l';reverse_str[1]='o';刚开始的reverse_str[0]='0';
但是没有字符串结束标志
所以要么你换成
char reverse_str[7] = "0";
在
printf("%s\n",reverse_str);之前加一句reverse_str[6]='\0';
定义的时候应该定义为
char reverse_str[7] = "0‘’;
你应该在reverse_str[5-i] = str[i];
之后加上 reverse_str[6]=‘\0’; 加一个字符串结束符,
数据溢出了。
#include
int main(void)
{
int i;
char str[6] = "hello";
char reverse_str[7] = "0"; /*此处不能是6*/
printf("%s\n",str);
for (i = 0; i < 5; i++)
reverse_str[5-i] = str[i];
printf("%s\n",reverse_str);
return 0;
}
C中字符串数组默认末尾还有一个不可见的字符'\0',所以如果char reverse_str[6] = "0";的话,后面把str数组赋值给reverse_str数组时产生下标超出,所以产生了一些不可预知的字符。
就是上面的大神回答的那样
你数组赋值有问题,而且输出也不是你写的那样子。。。
i=5时并没有赋值,所以输出错误
字符串reverse_str没有结束符'\0',在循环操作结束后加上就可以了