(这个问题很基础)
#include
using namespace std;
struct S
{
char name[10];
};
int main()
{
S a;
a.name = "abc";
cout << a.name;
}
大意是不能将字符串常量赋值给字符数组(除非是定义时赋值!如char a[10] = “abc”)。同样的,字符数组也不能赋值给字符数组。
因为name作为数组名,是一个指针常量,储存了这个字符数组的起始地址,不可指向其他字符串、字符数组的地址,不然成了内存泄漏。
int a[10];
int b[10];
b = a; //编译错误,表达式必须为可修改的左值,而b不可修改。
①使用string替代字符数组。
②使用strcpy函数:
//s->name = "12";
strcpy(a.name, "abc");
③使用字符指针:
struct S
{
const char *name;
};
int main()
{
S a;
a.name = "abc";
cout << a.name;
}
字符指针可以用字符串赋值,因为它储存的是字符串常量的首地址。
但是,此处必须用字符常量指针!因为赋值给name的“abc”是一个字符串,字符串是常量!不加const修饰会存在间址修改常量的风险。
通过这次简单的字符数组复习,暴露出我的大量知识盲区,还要加倍努力学习。
参考资料:
https://blog.csdn.net/u010012590/article/details/45130675
C++ primer plus