C语言:将字符数组a下标为单号元素赋给b然后输出,请改正!!

#include<stdio.h>
#include<string.h>
main()
{
char a[11]={"ilovechina"};
char b[6];
int i,j=0;
for(i=0;i<=9;i++)
{
if(i%2==1)
{
b[j]=a[i];
j++;
}
}
puts(b);
}

第1个回答  推荐于2016-11-22
#include<stdio.h>
#include<string.h>
main()
{
char a[11]={"ilovechina"};
char b[6] = {0};
int i,j=0;
for(i=0;i<=9;i++)
{  
if(i%2==1)
{
            b[j]=a[i];
j++;
}
}
puts(b);
}

//你的b数组没有初始化,所以它找不到结束符,所以程序会输出内存中a数组的内容,并以a的结束符作为结束。

本回答被提问者采纳
第2个回答  2015-05-15

字符串比实际看上去的长度要多一个字符串结束符。

即定义char a[11]={"ilovechina"};,长度为10,但其实最后还有一个结束符\0,一共占用11个字节的空间。


看楼主的定义应该是理解这一个知识点的,但是最后b并没有赋值结束符,导致最后输出的时候会有问题(因为没有结束符,所以输出的时候并不知道字符串已经结束,因此需要手动添加)

#include<stdio.h>
#include<string.h>
main()
{
 char a[11]={"ilovechina"};
 char b[6];
 int i,j=0;
 for(i=0;i<=9;i++)
 {  
     if(i%2==1)
     {
            b[j]=a[i];
   j++;
     }
  }
  b[j]='\0'; //添加一个结束符即可
 puts(b);
}

追问

xiexie!!

第3个回答  2015-05-15
b没有初始化,有可能输出不是预期。char b[6] = {0};根据规范,任何变量使用之前都要初始化。puts不安全,建议用printf或者fputs
相似回答