struct testing
{
char lastname[20];
};
testing *pt = new testing;
pt->lastname = "McLove";
我得到了
56 C:\ Users \ Daniel \ Documents \ Untitled2.cpp中的不兼容类型 将'const char [7]'赋值给'char [20]'
为什么?
提前致谢。
答案 0 :(得分:3)
因为编译时数组是常量。在你的结构testing
中,你有一个20 char
的数组,你正在尝试分配一个指针("McLove"
,一个编译时字符串,例如{{1} })到一个数组(const char*
),这将无法工作。
要将数据char[]
复制到数组中,您需要使用"McLove"
:
strncpy
或者更好的是,使用strncpy(pt->lastname, "McLove", 20); // 20 is the size of the array, change it when your array size changes, or better yet, use a constant for both
:
std::string
现在这样可行,因为struct testing {
string lastname;
};
testing* pt = new testing;
pt->lastname = "McLove";
有一个与std::string
一起使用的operator=
。
作为旁注,不要在免费商店上不必要地分配对象(使用const char*
);在堆栈上分配它们:
new
答案 1 :(得分:2)
字符串文字的类型为pointer to const char
。你可以使用它来初始化一个char数组,但你不能分配给char数组(从那个或其他任何东西)。
由于你显然在做C ++,你可能想要:
struct testing {
std::string lastname;
};
testing pt;
pt.lastname = "McLove";
动态分配testing
这样的对象非常不寻常。
答案 2 :(得分:1)
您无法将一个阵列分配给另一个阵列。您需要使用strcpy
(或更好,strncpy
)。
答案 3 :(得分:0)
因为C ++中的字符串文字具有类型const char[N]
,其中N
是文字的长度,包括NULL字符。所以你试图将const char[7]
分配给类型为char[20]
的数组,这正是编译器告诉你的。由于数组不可分配,因此无效。
使用strcpy
代替
strcpy( p-lastname, "McLove" );
当然,您还应该检查目标是否足够大以容纳源,或者使用strcpy
的某种变体来执行此操作。