あなたのコードにはいくつかの問題があります。
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 に保持することです。