首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符串打印疑惑,请达人指点,该如何解决

2012-03-09 
字符串打印疑惑,请达人指点如下小程序:#includestdio.hmain(){charstr[10]{0}inti0for(i0i 10i+

字符串打印疑惑,请达人指点
如下小程序:

#include   <stdio.h>

main()
{
        char   str[10]   =   {0};
        int   i   =   0;
 
      for(i=0;i <10;i++)
              str[i]   =   '0 '   +   i;

      for(i=0;i <10;i++)
              printf( "%c\n ",   str[i]);

      printf( "%s\n ",   str);
}

声明:   1.   此程序依次给str[0]...str[9]   赋值字符0...9.   分两次打印。但是结果出我所料。结果如下:
                      0
                      1
                      。。。
                      9
012345678
              2。   使用gcc   3.4,   Redhat   EL4,
疑惑:为什么用字符串打印方式,第10个字符9,变成了乱码,我知道打印字符串的时候,打印到‘\0’为止,所以打印结果是未知的,但是为什么已知的str[9]会发生变化?

[解决办法]
char str[10] = {0};
==》
char str[11] = {0};
[解决办法]
因为你的空间不足。

%s 输出时候遇到 \0 结束,
但是 char str[10] = {0}; 的话,末尾没有\0,导致乱码。
[解决办法]
在VS2005下并没有此问题

重新编译
[解决办法]
既然明知有错,为何不改
[解决办法]
你定义的是char str[10];你的意思是说str存储十个字符。str[0]=0,...,str[9]=9;
这点你做到了 。
而你printf( "%s ",str)时, 它是找 '\0 '结束,而在你的数组中最后一个是str[9]=9.所以你用%s输出是不对的。
不管printf( "%s ",str) 是0123456789还是012345678都是不对的。根据机器和编译器的具体情况而定。
[解决办法]
#include <stdio.h>

main()
{
char str[10] = {0};
int i = 0;

for(i=0;i <10;i++)
str[i] = '0 ' + i;

for(i=0;i <10;i++)
printf( "%c\n ", str[i]);
str[i]=0;
printf( "%s\n ", str);
}

热点排行