gpt4 book ai didi

C++ 代码转储 "random"数据

转载 作者:行者123 更新时间:2023-11-28 02:46:23 24 4
gpt4 key购买 nike

首先我要说的是,作为一名 C++ 程序员,我还算新手。但是我懂 PHP 和 VBA,所以对编程基础方面有很好的理解。

因为我在日常工作中经常使用 CSV,所以我认为编写一个处理 CSV 文件的库会是一个很好的学习练习。

我写了这个函数:

int getHeaders(ifstream & os, vector<string> & head2){
string STRING;
getline(os,STRING);
cout << STRING << endl;
STRING.erase(remove(STRING.begin(), STRING.end(), '\"'), STRING.end());
string::iterator it = STRING.begin();
int x = 0;
for (int index = 0; it < STRING.end(); it++, index++) {
if (*it == ',') {
head2.push_back(STRING.substr(0,index));
STRING.erase(0,index+1);
cout << endl << head2[x];
cout << endl << STRING;
x++;
}
}
return head2.size();
}

由以下调用:

int addRowCount = 0;
vector<string> head1;

ifstream outfile;
outfile.open("default.csv", ios_base::app);

cout << getHeaders(outfile, head1) << endl;
cout << head1[0] << endl << head1[1] << endl;

但是当我运行程序时,程序只是将一堆随机垃圾转储到控制台(并使应用程序崩溃)我正在使用 Windows,所以不能使用 valgrind。

有谁知道为什么会这样?显然这个“转储”不是我想要应用程序做的。我希望有人能指出我的代码中可以实现这一点的部分。

提前致谢。

最佳答案

当您在字符串上调用 erase 时,进入该字符串的迭代器将失效,因此在调用 STRING.erase() 之后使用 it 是错误的。

提示:当您查看支持迭代器的类的方法文档时,请注意有关使迭代器无效的注释。在 this page ,例如,阅读标题为 Iterator validity

的部分

[与答案无关,而是一个风格问题:在 C 和 C++ 中,对像 STRING 这样的变量名使用全部大写通常被认为是不好的风格。所有大写名称都用于#defined symbols]

关于C++ 代码转储 "random"数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com