cpp程序在读取csv文件时返回转储的核心



我正在尝试制作一个程序,读取csv文件,并将格式设置为字符串的二维矢量,以便在我的项目中使用。它什么也没说,并给出了奇怪的错误,说核心转储了。

#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
class pk{
public:
vector <string> func1(string a){
string temp="";
int k=0;
vector<string> finalone;
for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){
if (a[i]==','){
finalone.push_back(temp);
temp="";
k=0;
continue;
}
temp[k]=a[i];
k+=1;


}
return finalone;

}
};
int main(){
fstream f1;
string line;
vector< vector <string>> p;
f1.open("pk.txt");
while (f1){
getline(f1,line);
pk puj;
p.push_back(puj.func1(line));

}
f1.close();


}

以下是错误:/usr/include/c++/10.2.0/ostream:773:5:错误:"struct-std::enable_if<false,std::basic_stream&gt;'它给出了更多奇怪的错误,说内核最终被转储了。

无法通过sizeof(a)/sizeof(a[0])获取std::string中的字符数。您应该使用a.size()

此外,temp[k]=a[i];是坏的,因为字符串temp只有零个字符,这将导致超出范围的访问。您应该使用temp.push_back(a[i]);std::string追加一个字符。

参考文献:

  • std::basic_string-cppreference.com
    • std::stringstd::basic_string<char>的别名
  • std::basic_string<CharT,特征,分配器>:大小,std::basic_string<CharT,特征,分配器>:length-cppreference.com
  • std::basic_string<CharT,特征,分配器>:push_back-cppreference.com

最新更新