我可以看到您的代码存在一些问题:
您尝试在 std::string 上使用 sizeof (正如其他答案所指出的)
您在 C++ 中使用 memcpy(考虑使用迭代器的 std::copy 作为替代方案);您还尝试将读取数据的大小复制到char[20]
. 如果文件中的数据在第一个 ',' 字符之前包含长于 20 的字符串,则会造成缓冲区溢出。
在复制值之前,您不检查读取操作的结果。
您的代码应该/可以是:
while ( getline(file, transferstring, ',') ) // check the state of
// the stream after getline
{
cout << transferString << endl;
}
如果要复制到名称中,请使用以下之一:
char *name = nullptr;
while ( getline(file, transferstring, ',') )
{
name = new char[transferstring.size() + 1];
std::copy(transferstring.begin(), transferstring.end(), name);
name[transferstring.size()] = 0;
}
// somewhere later:
delete []name;
或者:
char name[20];
while ( getline(file, transferstring, ',') )
{
std::size_t size = std::min(transferstring.size(), 19);
std::copy_n(transferstring.begin(), size, name); // copy at most 19 characters
name[size] = 0;
}
我的选择是根本不使用 char 数组并将值保存在 std::string 中。