数组给数组赋值问题
chara[3],b[]="China";a=b;printf("%s",a);这个程序段运行后的结果是China,还是本来就是错误的??C语言中数组能这样直接相等吗??...
char a[3],b[]="China";
a=b;
printf("%s",a);
这个程序段运行后的结果是China,还是本来就是错误的??
C语言中数组能这样直接相等吗?? 展开
a=b;
printf("%s",a);
这个程序段运行后的结果是China,还是本来就是错误的??
C语言中数组能这样直接相等吗?? 展开
5个回答
展开全部
楼主可能把指针和数组名的作用给混淆了!
我看了楼上的解释,很详细,但恐怕楼主既然提出了这样的问题,估计也看不懂上面的解释,或者费解!
我给你稍微解释下:首先数组名a和b的值是地址,各表示a[3],b[]这两个数组的首地址,而且数组名是一个符号常量,而非变量。因此不能做任何赋值之类的运算。但你程序里的式子a=b,即把b的地址赋予给一个符号常量,而常量是不能在赋值运算符号的左边,既它的值不能被改变,不能被赋值的。
综上有,a的值任然没有变,任然是数组a[3]的首地址,所以数出时没有任何内容,而且编译时也不会通过,会提醒你=号的左边有错误!
我也理解了楼主的意思,是想通过把b数组的首地址赋予给a然后通过%s数出a数组。这样输出的就是b数组。只是你这里用错了对象,把符号常量a当做变量来赋值了。但你可以把b的首地址赋予给一个指针变量,使指针指向b的首地址,然后输出用%s数出指针就可以数出b了。具体如下:
#include <stdio.h>
void main()
{
char a[3],b[]={"China"};
char *p;
p=b;
printf("%s",p);
}
这里楼主就要注意p和a的区别,a是存放地址的常量,不能被赋值。p是存放地址的变量,可以被赋值。
另外,要实现楼主上面的目的,把数组b的内容放到数组a中,然后输出数组a的到数组b的内容,可以简单的用一个strcpy函数就行了。
程序如下:
#include <string.h>
#include <stdio.h>
void main()
{
char a[6],b[]={"China"};
strcpy(a,b);
printf("%s\n",a);
}
这里还是必须注意,strcpy中前一个数组的长度要大于或则等于后面数组的长度,这样在实现赋值的时候能够确保前面的数组容纳下后面数组的所有元素,所以这里把a数组的长度改为6。
希望能帮到楼主!
我看了楼上的解释,很详细,但恐怕楼主既然提出了这样的问题,估计也看不懂上面的解释,或者费解!
我给你稍微解释下:首先数组名a和b的值是地址,各表示a[3],b[]这两个数组的首地址,而且数组名是一个符号常量,而非变量。因此不能做任何赋值之类的运算。但你程序里的式子a=b,即把b的地址赋予给一个符号常量,而常量是不能在赋值运算符号的左边,既它的值不能被改变,不能被赋值的。
综上有,a的值任然没有变,任然是数组a[3]的首地址,所以数出时没有任何内容,而且编译时也不会通过,会提醒你=号的左边有错误!
我也理解了楼主的意思,是想通过把b数组的首地址赋予给a然后通过%s数出a数组。这样输出的就是b数组。只是你这里用错了对象,把符号常量a当做变量来赋值了。但你可以把b的首地址赋予给一个指针变量,使指针指向b的首地址,然后输出用%s数出指针就可以数出b了。具体如下:
#include <stdio.h>
void main()
{
char a[3],b[]={"China"};
char *p;
p=b;
printf("%s",p);
}
这里楼主就要注意p和a的区别,a是存放地址的常量,不能被赋值。p是存放地址的变量,可以被赋值。
另外,要实现楼主上面的目的,把数组b的内容放到数组a中,然后输出数组a的到数组b的内容,可以简单的用一个strcpy函数就行了。
程序如下:
#include <string.h>
#include <stdio.h>
void main()
{
char a[6],b[]={"China"};
strcpy(a,b);
printf("%s\n",a);
}
这里还是必须注意,strcpy中前一个数组的长度要大于或则等于后面数组的长度,这样在实现赋值的时候能够确保前面的数组容纳下后面数组的所有元素,所以这里把a数组的长度改为6。
希望能帮到楼主!
展开全部
你好!!
这样肯定是不对的!!
首先我们来解释一下:b[]="China";表示在静态存储区里的空间放入字符串
“China";并把在静态存储区的首地址赋给在栈的的字符串数组b,使数组存放的是字符串的首地址。注意要是把字符串赋给数组的时候系统会自动的在字符串的后面添加一个结束标志即‘\0’,要是一个字符一个字符赋值的时候,系统不会在后面添加技术标志。所以此时数组的长度是6个字节。我c语言中,字符串数组不可以直接赋值(但是要是指针变量是可以的,后面会提到)。即a=b;是错误的。要是赋值的话要用strcpy()函数,还有一点:要复制字符串的数组必须有足够大的空间来存放字符。故字符串数组a的大小至少是6个字节。修改程序:
#include<stdio.h>
#include<string.h>
void main ()
{
char a[6],b[]="China";
//a=b;
strcpy(a,b);
printf("%s\n",a);
}
结果:
China
Press any key to continue
我们还可以用指针变量:
代码如下:
#include<stdio.h>
#include<string.h>
void main ()
{
char *a,*b="China";
a=b;
//strcpy(a,b);
printf("%s\n",a);
}
结果:
China
Press any key to continue
我们来解释一下为什么可以用:
a=b;同样我们还是看看:*b="China";表示在静态存储区里的空间放入字符串
“China";并把在静态存储区的首地址赋给在栈的的字符串指针变量b,使指针指向字符串China,
然后a=b;表示把指针变量b的值即字符串的首地址赋给指针变量a,这样赋值是合法的,是语法符规定的。
当然也可以定时string对象,这样的对象可以直接赋值。
要是不太理解的话,我们再交流!!!
这样肯定是不对的!!
首先我们来解释一下:b[]="China";表示在静态存储区里的空间放入字符串
“China";并把在静态存储区的首地址赋给在栈的的字符串数组b,使数组存放的是字符串的首地址。注意要是把字符串赋给数组的时候系统会自动的在字符串的后面添加一个结束标志即‘\0’,要是一个字符一个字符赋值的时候,系统不会在后面添加技术标志。所以此时数组的长度是6个字节。我c语言中,字符串数组不可以直接赋值(但是要是指针变量是可以的,后面会提到)。即a=b;是错误的。要是赋值的话要用strcpy()函数,还有一点:要复制字符串的数组必须有足够大的空间来存放字符。故字符串数组a的大小至少是6个字节。修改程序:
#include<stdio.h>
#include<string.h>
void main ()
{
char a[6],b[]="China";
//a=b;
strcpy(a,b);
printf("%s\n",a);
}
结果:
China
Press any key to continue
我们还可以用指针变量:
代码如下:
#include<stdio.h>
#include<string.h>
void main ()
{
char *a,*b="China";
a=b;
//strcpy(a,b);
printf("%s\n",a);
}
结果:
China
Press any key to continue
我们来解释一下为什么可以用:
a=b;同样我们还是看看:*b="China";表示在静态存储区里的空间放入字符串
“China";并把在静态存储区的首地址赋给在栈的的字符串指针变量b,使指针指向字符串China,
然后a=b;表示把指针变量b的值即字符串的首地址赋给指针变量a,这样赋值是合法的,是语法符规定的。
当然也可以定时string对象,这样的对象可以直接赋值。
要是不太理解的话,我们再交流!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
肯定不可以啦
字符串就是个数组,也是个指针,它有别于其他类型
首先你的b[]不给下标 就是说你开的空间和后面的字符串常量一样大小,
然后你又把 b付给了 只有3个字节大小的a 肯定报错啦
还有一点就是,字符串赋值用strcpy()来赋值
字符串就是个数组,也是个指针,它有别于其他类型
首先你的b[]不给下标 就是说你开的空间和后面的字符串常量一样大小,
然后你又把 b付给了 只有3个字节大小的a 肯定报错啦
还有一点就是,字符串赋值用strcpy()来赋值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
本来就是错误的,
1,数组a不够大
2,定义a[],b[]应该是这样 *a,*b
所以正确的应该是
char *a,*b="China";
a=b;
printf("%s",a);
1,数组a不够大
2,定义a[],b[]应该是这样 *a,*b
所以正确的应该是
char *a,*b="China";
a=b;
printf("%s",a);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组没有这样的赋值方法,而且你可以编好看输出结果,比在这儿问明朗许多!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询