C++ 使用stringstream将字符串解析为指针数组时出现分段错误
我正在逐行读取一个文本文件,该文件的内容由逗号分隔,并通过使用getline()提取到我的stringColor、stringName、stringReward变量进行解析,然后传递到我的stringstream ss,然后传递到我的TilerRay指针数组,分别转换为int、string和int变量 我的程序进行编译,但当我运行它时,它会生成一个分段错误11,似乎就是我将行内容传递到stringstream的位置。我找不到问题出在哪里,但是 如果有人能指出错误所在,我将不胜感激 这是我试图从文本文件中读取的每一行的格式。 它应该能够读取任意数量的行 0,平铺1,5C++ 使用stringstream将字符串解析为指针数组时出现分段错误,c++,arrays,pointers,getline,stringstream,C++,Arrays,Pointers,Getline,Stringstream,我正在逐行读取一个文本文件,该文件的内容由逗号分隔,并通过使用getline()提取到我的stringColor、stringName、stringReward变量进行解析,然后传递到我的stringstream ss,然后传递到我的TilerRay指针数组,分别转换为int、string和int变量 我的程序进行编译,但当我运行它时,它会生成一个分段错误11,似乎就是我将行内容传递到stringstream的位置。我找不到问题出在哪里,但是 如果有人能指出错误所在,我将不胜感激 这是我试图从文
4、瓷砖2,0
2、瓷砖4、1
#include <stdio.h>
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct
{
int color;
string name;
int reward;
}tile;
int main()
{
string line;
int numberOfLines = 0;
ifstream inputFile("inputFile.txt");
if (inputFile.is_open())
{
while(getline(inputFile, line))
{
++numberOfLines; //value to set tile amount
cout << numberOfLines <<endl;
}
tile *tileArray = new tile[numberOfLines];
string stringColor, stringName, stringReward; //declare these values as strings and later convert
stringstream ss; //stringstream variable to convert string variable
for(int n = 0; n<(numberOfLines-1); n++)
{
getline(inputFile, stringColor, ','); //delimiter at first comma
cout << stringColor << endl;
getline(inputFile, stringName, ','); // delimiter at second
cout << stringName << endl;
getline(inputFile, stringReward); // stop at the end of the line
cout << stringReward << endl;
ss<<stringColor;
ss>>tileArray[n]->color;
ss.str("");
ss.clear();
cout << tileArray[n]->color;
ss<<stringName;
ss>>tileArray[n]->name;
ss.str("");
ss.clear();
cout << tileArray[n]->name;
ss<<stringReward;
ss>>tileArray[n]->reward;
ss.str("");
ss.clear();
cout << tileArray[n]->reward;
}
}
return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
类型定义结构
{
内色;
字符串名;
智力奖励;
}瓷砖;
int main()
{
弦线;
int numberOfLines=0;
ifstream输入文件(“inputFile.txt”);
if(inputFile.is_open())
{
while(getline(inputFile,line))
{
++numberOfLines;//设置平铺数量的值
cout我将简化stringstream
对象的使用。使用相同的stringstream
对象作为输入流和输出流需要深入理解内部位置是如何操作的
{
// Create a nested block and a local istringstream in the nested scope
istringstream ss(stringColor);
ss >> tileArray[n]->color;
}
cout << tileArray[n]->color;
{
//在嵌套范围中创建嵌套块和本地istringstream
istringstream ss(stringColor);
ss>>Tileray[n]->颜色;
}
颜色;
同样地
{
istringstream ss(stringName);
ss >> tileArray[n]->name;
}
cout << tileArray[n]->name;
{
istringstream ss(stringName);
ss>>Tileray[n]->名称;
}
姓名;
及
{
istringstream ss(stringReward);
ss>>提拉雷[n]>奖励;
}
不能奖励;
指针数组在哪里?您有一个tile
数组,但我没有看到指针数组。顺便说一句,指针数组应该是:新tile*[24]
如果您可以使用调试器并告诉我们是哪一行导致了问题。我建议您删除数组并使用std::vector
。问题会少一些。生成一个核心转储并使用gdb分析它…几乎不需要几分钟。这样至少可以知道行号。sudo gdb-c“核心文件”*.exe
后接where
命令一旦gdb激活谢谢,我接受了你的建议,但是它仍然会给出分段错误11错误。。。
{
istringstream ss(stringReward);
ss >> tileArray[n]->reward;
}
cout << tileArray[n]->reward;