使用 Stringstream 将字符串解析为指针数组时出现分段错误错误
segmentation fault error when parsing string to pointer array with stringstream
我正在逐行读取一个文本文件,该文件的内容用逗号分隔,并通过使用 getline() 提取到我的 stringColor、stringName、stringReward 变量中来解析,传递到我的 stringstream ss,然后传递给我的 tileArray 指针数组到各自的 int、string 和 int 变量中。
我的程序编译,但是当我运行它时,它会生成一个分段错误 11,似乎是我将行内容传递到字符串流的地方。但是我找不到问题出在哪里...
也许如果有人能指出错误在哪里,我将不胜感激。
这是我尝试从文本文件中读入的每一行的格式。它应该能够读取任意数量的行数。
0,瓷砖 1,5
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;
}
我会简化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 ss(stringName);
ss >> tileArray[n]->name;
}
cout << tileArray[n]->name;
和
{
istringstream ss(stringReward);
ss >> tileArray[n]->reward;
}
cout << tileArray[n]->reward;
相关文章:
- "错误:数组下标的无效类型'float [10001][float]'是什么意思?
- 错误:数组下标的类型"const bool[int]"无效
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 使用GCC 4.8构建错误:数组用作初始化器
- 如何修复问题中的"teminated due to timeout"错误 数组操作 |黑客兰克?
- | 9 |错误:非静态数据成员'matrix :: row'| 9 |错误:数组绑定不是在']']'令牌|之前的整数常数
- 错误:数组的总大小不得超过0x7fffffff字节
- 错误:无法将参数“1”的“double*”转换为“double”,错误:数组下标的类型“double[double]”无
- 返回并强制转换数组指针(错误:数组下标的类型..无效)
- 返回c++中的字符错误数组
- VC++错误:数组实例化的大小来自模板化的静态常量
- c++mex错误:数组下标的类型“double[mwSize]”无效
- 错误数组用作初始值设定项,我不知道错误
- 编译错误 - 数组下标'char[int]'的类型无效
- 向量在我的类中.错误:数组new [-fpermissive]中的圆括号初始化项
- 错误:数组下标的类型无效
- 错误:数组new中的size必须是整型[-fpermissive]
- 错误:数组下标的“Pixel*[__complex__ int]”类型无效
- c++错误数组显示
- C++:错误:数组下标的类型“size_t{aka long unsigned int}[size_t{aka long