C ++中的动态结构

时间:2011-08-04 23:23:00

标签: c++

struct testing
{
    char lastname[20];        
};

testing *pt = new testing;            
pt->lastname = "McLove";

我得到了

  

56 C:\ Users \ Daniel \ Documents \ Untitled2.cpp中的不兼容类型   将'const char [7]'赋值给'char [20]'

为什么?

提前致谢。

4 个答案:

答案 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的某种变体来执行此操作。