C语言!这道小题的结果是什么?

来源:百度知道 编辑:UC知道 时间:2024/06/18 16:31:39
执行以下程序段后的输出结果是---,数组b中的内容为---?

char a[5]="123",b[7]="ABCDEF";
strcpy(b,a);
printf("%s",b)

前一个我知道是123,后一个是什么呢?是123\0EF还是123\0EF\0呢?

打印结果是123.
b的内容是123\0EF

如果你知道strcpy的实现,你就会发现,strcpy会将\0一并拷贝过去
所以\0占了b的第四个字符空间

因为字符串的输出是以遇见'\0'就结束的啊。。
a中本身就有个'\0'的吗。拷贝过来不还是有
'\0'的啊,a[4]也估计是'\0'

是后者。
分析:strcpy(b,a)是将a串中的值赋值到b串中,a串为123 当然最后的\0也在复制的范围。当用%s输出b时由于是遇到复制过来的\0所以只输出了123,但是b数组中没有被覆盖的部分值是不变的,其原来是ABCDEF\0,前四个字符被覆盖,故数组b中的内容应该为:123\0EF\0

可以在程序中加入几句代码来验证一下。
程序如下,供参考:
#include "stdio.h"
#include "string.h"
void main(){

char a[5]="123",b[7]="ABCDEF";
strcpy(b,a);
printf("%s\n\n",b);

for(int i=0;i<7;i++)
printf(" %d ",b[i]);
//此处如果按%c格式输出字符是不容易辨认最后一个\0的,因为\0输出显示为一个空格
//故用%d输出,显示数组中各个元素的ASCII码,并用空格分开,
//这样可以很明确的看出数组b中各个元素的具体内容
printf("\n\n");
}

附:1对应的ASCII码值为49,2、3...依次加一;
A对应的ASCII码值为69,B、C、D..