有下面程序段 char a[3],b[ ]="china";a=b;printf("%s",a);则是否编译错误?

 我来答
iiiiiiiipl
2019-07-09 · TA获得超过9922个赞
知道答主
回答量:68
采纳率:66%
帮助的人:3.8万
展开全部

有编译错误。

数组之间拷贝不能直接使用a=b,而是可以使用字符串拷贝函数strcpy。而且数组a的长度只有3,而数组b有5个字符,还不包括结尾字符。

字符串拷贝函数strcpy格式:strcpy (字符数组名1,字符数组名2) 的功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“”也一同拷贝。字符数名2, 也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。

本函数要求字符数组1应有足够的长度,否则不能全部装入所拷贝的字符串。

扩展资料:

1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1。

3.若不给可初始化的数组赋初值,则全部元素均为0值。

4.假如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。

参考资料:

百度百科-数组

Mr_Yang2012
推荐于2018-02-12 · TA获得超过1647个赞
知道小有建树答主
回答量:392
采纳率:0%
帮助的人:491万
展开全部
应该是无法通过编译的
#include<stdio.h>
int main(){
char a[3],b[]="china";
a=b; //错误在这一句:incompatible types in assignment of `char[6]' to `char[3]'
printf("%s",a);
return 0;}
编译器提示a=b;这句中必须是一个可更改的左值!注意数组名相当于一个指针常量,而不是绝对等同于指针!
我修改的代码,这样子就可以了:
#include<stdio.h>
int main(){
int i;
char *a,b[]="china"; //这里改成char*a
a=b;
for(i=0;i<3;i++)
printf("%c",*(a+i)); //通过循环输出a[0]到a[2],结果:chi
return 0;}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jssyxzy
2012-02-28 · TA获得超过323个赞
知道小有建树答主
回答量:560
采纳率:100%
帮助的人:157万
展开全部
编译时不会报错,
输出china
但是问题是,a的3个字节后的空间如果有存储数据,那么,该存储数据会被覆盖掉
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
刑梓楠肖添
2019-06-01 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:28%
帮助的人:812万
展开全部
会输出编译错误信息,字符数组的复制要用strcpy()函数,不能这样直接用赋值操作符赋值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式