C++98如何向含数组成员的结构体vector追加末尾元素
问题原因
这个编译错误是类型不匹配导致的:
- C里
"XXX"属于const char*类型的字符串字面量,而你的结构体成员是char数组。C98不支持直接对char数组做整体赋值,如果你写了类似结构体变量.数组成员 = "XXX"的代码,相当于试图把指针赋值给数组/char类型元素,就会触发这个报错。 - 另一种常见的错误写法是
结构体变量.数组成员[0] = "XXX",直接把字符串赋值给单char类型的数组元素,也会报同样的转换错误。
解决方法(完全兼容C++98)
假设你的结构体定义如下(char数组成员名以data为例,长度需≥4,存储"XXX"需要3个字符+结尾的'\0'):
struct LogItem { char data[32]; // 长度可按需调整,只要足够容纳你的测试数据即可 // 其余成员按需定义 };
你已经将10条测试数据读取到vector<LogItem> log_vec中,追加第11个元素的正确写法如下:
LogItem extra_item; // 用strcpy完成字符串拷贝,不要直接赋值数组名 strcpy(extra_item.data, "XXX"); log_vec.push_back(extra_item);
注意事项
- 结构体中的char数组长度必须大于等于你要存入的字符串长度+1(留位置给字符串结束符'\0'),避免出现缓冲区溢出问题。
- 如果结构体包含其他成员,追加前请完成对应初始化,避免触发未定义行为。
内容的提问来源于stack exchange,提问作者Bebe
相关产品推荐
相关产品推荐

