关于在 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);
谁能解释一下
为什么下面的代码可以在结构成员中保存字符串
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);