C ++:赋值的不兼容类型

时间:2017-12-12 00:39:24

标签: c++ struct

我创建了这个struct

struct message_text{
                    char text[1024];
};

message_text instance;

instance.text = "HELLO WORLD, FIRST MESSAGE";

我收到此错误:

error: incompatible types in assignment of ‘const char [27]’ to ‘char [1024]’
         instance.text = "HELLO WORLD, FIRST MESSAGE";

我不明白这个错误,因为instance.text的大小不超过最大邮件大小,即1024字节。

我看过其他类似的问题,但我无法理解在创建结构时我的错误是什么

感谢帮助

2 个答案:

答案 0 :(得分:1)

char数组不能像那样工作 - 例如,你不能像int那样分配它们(尽管你可以在初始化数组时这样做)。如果您要将该文字复制到char数组中,请使用strncpy

或者,更好的是,当您将其标记为C ++时 - 只需使用标准的string类。

答案 1 :(得分:0)

正如其他人提到的,您应该使用std::string。但是如果你真的想为数组分配一个字符串文字,你可以这样做:

struct message_text{
        char text[1024];
        template <int N>
        void assignText(const char (&other)[N]) {
            static_assert(N < 1024, "String contains more than 1024 chars");
            for(int i =0 ; i < N ; ++i) {
                text[i] = other[i];
            }
        }
};

注意:

  1. 以上仅适用于从字符串文字或字符数组中分配。不支持空终止字符串。
  2. 由于assignText是一个模板,它会为每个使用唯一N的用户生成一个函数。这可能会导致二进制文件大小增加。
  3. 由于assignText是模板,因此您必须在标头或同一源文件中定义它。
  4. 编译器资源管理器:https://godbolt.org/g/1oLcAq