我在使用struct数组的概念时遇到了很多麻烦。我把一些基本代码放在一起。这段代码的输出不是我预期的。我想知道是否有人可以解释为什么这段代码的行为方式。
#include <iostream>
#include <cstdlib>
#include <string>
#include <sstream>
struct DataRow
{
std::string word1;
std::string word2;
std::string word3;
};
void getRow( std::string line, DataRow** dataRowPointer, int index )
{
std::stringstream sline(line);
std::string word;
int wordIndex = 0;
*dataRowPointer = new DataRow[3];
while( sline >> word )
{
if ( wordIndex == 0 )
{ (*dataRowPointer)[index].word1 = word; }
else if ( wordIndex == 1 )
{ (*dataRowPointer)[index].word2 = word; }
else
{ (*dataRowPointer)[index].word3 = word; }
wordIndex++;
}
}
int main( )
{
int index = 0;
std::string line1 = "This is line";
std::string line2 = "Two is magic";
std::string line3 = "Oh Boy, Hello";
DataRow* dataRowPointer;
getRow( line1, &dataRowPointer, index );
index++;
getRow( line2, &dataRowPointer, index );
index++;
getRow( line3, &dataRowPointer, index );
for( int i = 0; i < 3; i++ )
{
std::cout << dataRowPointer[i].word1 << dataRowPointer[i].word2 << dataRowPointer[i].word3 << "\n";
}
return 0;
}
有3个字符串。我想将每个字符串中的每个单词分开并将它们存储到一个结构中。我有一系列结构来存储它们。数组的大小为3(因为有3行)。我没有将指针设置为main,我将指针设置在我的函数中。从那里开始收集我的话来存储。
我获得了这个输出:
(blank line)
(blank line)
OhBoy,Hello
我的问题是,我的前两个结构在哪里?
答案 0 :(得分:5)
您的getRow
正在每次调用时重新分配DataRow数组,因此您将丢失前两次调用的结果。将分配移至main()
。