【发布时间】:2016-05-04 01:10:06
【问题描述】:
我将我的结构定义为:
struct taxPayer{
char name[25];
long int socialSecNum;
float taxRate;
float income;
float taxes;
};
我的主要功能包含:
taxPayer citizen1, citizen2;
citizen1.name = "Tim McGuiness";
citizen1.socialSecNum = 255871234;
citizen1.taxRate = 0.35;
citizen2.name = "John Kane";
citizen2.socialSecNum = 278990582;
citizen2.taxRate = 0.29;
编译后在citizen1.name = "Tim McGuiness"; 和citzen2.name = "John Kane"; 上给我一个错误(C3863 数组类型char[25] 不可赋值,表达式必须是可修改的左值)
如何消除此错误并将citizen1.name 设置为一个名称并将citizen2.name 设置为另一个名称?
【问题讨论】:
-
只需将
char name[25]更改为const char*。或使用std::string -
完美,将
char name[25]切换为char *name并且工作正常。 -
@ZackSloan 切换到
char* name并不像您想象的那样工作。您需要为它分配内存,否则它似乎可以工作,但是您遇到未定义的行为并且代码很可能会崩溃。如果可能,坚持std::string,所有这些噩梦都会结束。 -
啊,我不是说切换到
char*,而是说const char*。巨大差距。这只有在编译时知道name时才有意义。如果要在运行时输入name,则使用std::string。 -
或者,如果你真的想要,你可以使用
char*作为taxPayer::name的类型,结合strdup,它会为你处理内存分配:citizen1.name = strdup("Tim McGuiness");。但同样,如果您编写 C++,请坚持使用 C++。