关于在 c 中的结构成员中存储字符串的问题

Question on storing a string inside a struct member in c

谁能解释一下

为什么下面的代码可以在结构成员中保存字符串

struct prefix {
    char aString[70];
};

struct prefix data={
  .aString = "d08430c90b467422ae9bf7f8ecf8a77682f92764efe53e0ebe26d4ffb6fb96bf"
 };

而下面的代码没有?

struct prefix {
    char aString[70];
};

struct prefix data;

data.aString = "d08430c90b467422ae9bf7f8ecf8a77682f92764efe53e0ebe26d4ffb6fb96bf"; 
              //Array type 'char [70]' is not assignable

初始化:创建一个对象并在一个指令中指定它的值;
赋值:改变pre-existing对象

的值
struct prefix data = { ... }; // initialization;
struct prefix data; // not initialized now, cannot ever initialize it later, only assign

表达式

data.aString = "d08430c90b467422ae9bf7f8ecf8a77682f92764efe53e0ebe26d4ffb6fb96bf";

(a string literal) 只是一个指针,指向一些初始化的数据段,填充了你在双引号之间写的字符,最后加上一个空字符....它是那个数组的地址在赋值时传递的字符的数量,这需要一个指针类型(而不是一个数组,这是你声明的)

使用

    strcpy(data.aString, "d08430c90b467422ae9bf7f8ecf8a77682f92764efe53e0ebe26d4ffb6fb96bf");

将固定的字符串字面量复制到数组占用的内存中。或者更好的是,在您使用不适合数组大小的字符串时保护您:

    strncpy(data.aString, "d08430c90b467422ae9bf7f8ecf8a77682f92764efe53e0ebe26d4ffb6fb96bf", sizeof data.aString);