这样肯定是不对的!!
首先我们来解释一下:b[]="China";表示在静态存储区里的空间放入字符串
“China";并把在静态存储区的首地址赋给在栈的的字符串数组b,使数组存放的是字符串的首地址。注意要是把字符串赋给数组的时候系统会自动的在字符串的后面添加一个结束标志即‘\0’,要是一个字符一个字符赋值的时候,系统不会在后面添加技术标志。所以此时数组的长度是6个字节。我c语言中,字符串数组不可以直接赋值(但是要是指针变量是可以的,后面会提到)。即a=b;是错误的。要是赋值的话要用strcpy()函数,还有一点:要复制字符串的数组必须有足够大的空间来存放字符。故字符串数组a的大小至少是6个字节。修改程序:
#include
#include
voidmain()
{
chara[6],b[]="China";
//a=b;
strcpy(a,b);
printf("%s\n",a);
}
结果:
China
Pressanykeytocontinue
我们还可以用指针变量:
代码如下:
#include
#include
voidmain()
{
char*a,*b="China";
a=b;
//strcpy(a,b);
printf("%s\n",a);
}
结果:
China
Pressanykeytocontinue
我们来解释一下为什么可以用:
a=b;同样我们还是看看:*b="China";表示在静态存储区里的空间放入字符串
“China";并把在静态存储区的首地址赋给在栈的的字符串指针变量b,使指针指向字符串China,
然后a=b;表示把指针变量b的值即字符串的首地址赋给指针变量a,这样赋值是合法的,是语法符规定的。
当然也可以定时string对象,这样的对象可以直接赋值。
要是不太理解的话,我们再交流!!!