gpt4 book ai didi

c++ - 为什么我在这里得到一个 EXC_BAD_ACCESS 以及如何让它工作?

转载 作者:行者123 更新时间:2023-11-30 04:40:05 24 4
gpt4 key购买 nike

我试图让我的代码能够分离a file进入客户数据库(它由许多空格而不是制表符分隔)。我尝试使用 strtok,但出现 EXC_BAD_ACCESS 错误。这是我的 main.cpp 代码:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include "Cust.h"
using namespace std;

int main (int argc, char * const argv[]) {
Cust customers[500];
int idx = 0;
string tmpString = "";
string tmpAcctFN = "";
string tmpAcctLN = "";
ifstream input("P3_custData.txt");
while (!input.eof()){
getline(input,tmpString);
tmpString.insert(0,"");
customers[idx].setAcctNum(atoi(strtok((char *)tmpString.c_str()," ")));
customers[idx].setAcctFN(strtok(NULL," "));
customers[idx].setAcctLN(strtok(NULL," "));
//customers[idx].setCurrBalance(atof(strtok((char *) tmpString.c_str()," ")));
}
cout << "return 0;";
return 0;
}

根据评论进行更改后,我仍然得到 EXC_BAD_ACCESS:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include "Cust.h"
using namespace std;

int main (int argc, char * const argv[]) {
Cust customers[500];
int idx = 0;
string tmpString = "";
string tmpAcctFN = "";
string tmpAcctLN = "";
char * s;
ifstream input("P3_custData.txt");
while (!input.eof()){
getline(input,tmpString);
s = strdup (tmpString.c_str());
customers[idx].setAcctNum(atoi(strtok(s," ")));
customers[idx].setAcctFN(strtok(NULL," "));
customers[idx].setAcctLN(strtok(NULL," "));
//customers[idx].setCurrBalance(atof(strtok((char *) tmpString.c_str()," ")));
}
cout << "return 0;";
return 0;
}

最佳答案

试图修改 std::string::c_str() 方法返回的字符串是非法的。 strtok 将进行这样的尝试(您必须放弃返回字符串的常量性这一事实是一个致命的赠品)。换句话说,您不能对 std::string::c_str() 的结果使用 strtok

要么摆脱 strtok(更好),要么创建字符串的独立可修改拷贝并在其上使用 strtok(更糟)。

关于c++ - 为什么我在这里得到一个 EXC_BAD_ACCESS 以及如何让它工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1794069/

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