c的\0问题

来源:百度知道 编辑:UC知道 时间:2024/05/06 09:03:53
下面的c程序:
#include <stdio.h>
int main(void)
{
int i;
char str[6] = "hello";
char reverse_str[6] = "";
printf("%s\n", str);
for (i = 0; i < 5; i++)
reverse_str[5-i] = str[i];
printf("%s\n", reverse_str);
return 0;
}
其中reverse_str[5-i] = str[i];是错误的,应该改为:
reverse_str[4-i] = str[i];
如果按照reverse_str[5-i] = str[i];,最后结果应该是:
reverse_str[5] = h;
reverse_str[4] = e;
reverse_str[3] = l;
reverse_str[2] = l;
reverse_str[1] = o;
reverse_str[0] = “”;
那为什么打印reverse_str的时候就是为空了呢?是因为reverse_str没有\0结束符再加上第一个字符为空?还是因为没有赋值,还是取的初始值""?谢谢!

5的话,实际执行的是
reverse_str[5] = str[0]=h;
reverse_str[4] = str[1]=e;
reverse_str[3] = str[2]=l;
reverse_str[2] = str[3]=l;
reverse_str[1] = str[4]=o;
reverse_str[0]没变,还是'\0',reverse_str的第一个字符就变成了结束符,当然没有输出了

用4的话,则赋值了
reverse_str[4]=str[0]=h
reverse_str[3]=str[1]=e
reverse_str[2]=str[2]=l
reverse_str[1]=str[3]=l
reverse_str[0]=str[4]=o
reverse_str[5]没变,还是'\0',正好构成完整的字符串olleh