为啥我的编译器对 c 字符串类型的向量存在内存问题?
Posted
技术标签:
【中文标题】为啥我的编译器对 c 字符串类型的向量存在内存问题?【英文标题】:Why does my compiler have a memory problem with a vector of c string type?为什么我的编译器对 c 字符串类型的向量存在内存问题? 【发布时间】:2019-01-26 06:04:52 【问题描述】:为什么我不能创建一个 c 字符串时间的向量。当我创建一个时,我的编译器会引发内存问题。
#include <iostream>
#include <vector>
using namespace std;
int main()
vector<char[32]> buffVector;
return 0;
【问题讨论】:
首先,这不是 C 字符串;它是char
的数组。其次,查看std::vector
中可包含的底层元素类型的要求,然后考虑char[32]
中的哪一个不 符合。 (提示:copy-assignable 是什么意思?)
“编译器抛出内存问题”是什么意思?描述症状(错误消息或其他)。如果您没有正确解释,请不要依赖人们猜测。
【参考方案1】:
来自https://en.cppreference.com/w/cpp/container/vector:
T
必须满足CopyAssignable 和CopyConstructible 的要求。
你不能使用vector<char[32]>
的原因是char[32]
既不是CopyAssignable也不是CopyConstructible。
你不能使用:
char a[32];
char b[32];
a = b; // Can't assign an array to another.
char c[32] = b; // Can't initialize an array using another.
幸运的是,有一个简单的解决方法。您可以将数组包装在 struct
中,并改用 struct
的 vector
。
struct foo char array[32]; ;
std::vector<foo> v; // OK.
【讨论】:
以上是关于为啥我的编译器对 c 字符串类型的向量存在内存问题?的主要内容,如果未能解决你的问题,请参考以下文章
C语言中 int 类型在内存中占4个字节 double类型在内存中占8个字节 为啥地址编译出来都是6个16进制数字