c语言中不能将字符串赋值给字符数组

参考文章:c语言中,为什么字符串可以赋值给字符指针变量
1.可以将字符串赋值给指向字符的指针p,而不能将字符串赋值给一个字符数组。

char a[10]="hello";//正确的。
char a[10];a="hello";//错误的
char *a ="hello";//正确的

第一种写法:即char a[10],开辟了10个字节大小的空间,这里的字符串“hello”已经不是常量了,类似于a[0]=‘h’,a[1]=‘e’,a[2]=‘l’,a[3]=‘l’,a[4]=‘o’,a[5]=’\0’;它被存放在栈区。

第二种写法:a=“hello”,则是错误的;因为数组的地址a为一个常量,”hello”其实代表的是存储这些字符的地址,(位于常量区),而非代表字符本身。

如下所示:会报错:因为运算符的左边应该是一个“左值”。所谓“左值”就是指在程序中占用内存空间、可以被修改的量,比如各种变量。 而数组的地址:是一个确定的值。

第三种写法:”hello”位于常量区,即为常量字符串,”hello”是其实代表的是h首元素的地址;因为hello为常量字符串,更好的写法是: const char *a=“hello”;

struct PepInf
{ 
	int age;
	char name[10];
	char gender[10];
};
void InitPeo(struct PepInf *pc)
{ 
	pc->age = 20;
	pc->name = "tianxin";//报错! 1 IntelliSense: 表达式必须是可修改的左值。 
	pc->gender = "women";
}

c语言中赋值应该采取strcpy的方式,这里就不会出问题啦!

strcpy(pc->name, "tianxin");
strcpy(pc->gender, "女");
    原文作者:tjh1998
    原文地址: https://blog.csdn.net/tjh1998/article/details/114628498
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞