gpt4 book ai didi

c++ - 使用文件 I/O C++ 时出现段错误 11

转载 作者:太空狗 更新时间:2023-10-29 21:00:03 24 4
gpt4 key购买 nike

我在 Mac 上遇到代码块和 Xcode 问题。每次我在代码块上运行代码时,我都会收到 Segmentation Fault 11,当我尝试在 Xcode 上时,我会收到 Thread 1: exc_bad_access (code=1 address=0x0xffffffff0000000a)。但是,如果我通过代码块在 PC 上运行此代码,它就会运行。有谁知道如何解决这个问题,以便我可以在我的 Mac 上运行该程序。

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

struct Book
{
string isbn;
string title;
string author;
double price;
string seller;
};

int main()
{
Book booklist[100];
ifstream infile;
ofstream outfile;

//int numBooks = 0;
int i=0;
char dummy;

outfile.open("readBooks.txt");
infile.open("usedBooks.txt");

if (infile.fail())
{
cout << "The file doesn't exist";
exit(-1);
}

else
{
//for (i=0; i<100; i++)
while (!infile.eof())
{
getline (infile, booklist[i].isbn);
getline (infile, booklist[i].title);
getline (infile, booklist[i].author);
infile >> booklist[i].price;
infile.get(dummy);
getline (infile, booklist[i].seller);

outfile << "ISBN: " << booklist[i].isbn << endl;
outfile << "Title: " << booklist[i].title << endl;
outfile << "Author: " << booklist[i].author << endl;
outfile << "Price: " << booklist[i].price << endl;
outfile << "Seller: " << booklist[i].seller << endl << endl;
i++;
}
}
}

最佳答案

Book booklist[100];

使用魔数(Magic Number)是不好的做法。你确定i在你的程序后面总是少于 100?如果不是,那么您的程序可能会做一些奇怪的事情。你应该使用 std::vector<Book> booklist;反而。您可能还想使用 vector 的 at()成员函数以避免索引数组超出范围时的错误。

//for (i=0; i<100; i++)
while (!infile.eof())
{

使用 .eof()检查循环条件中的 C++ 流是 almost always wrong .相反,您可能想要:

// returns true of book is successfully read, false otherwise
bool read_book(std::istream &is, Book &book) {
Book tmp;
if (getline(is, tmp.isbn) &&
getline(is, tmp.title) &&
getline(is, tmp.author) &&
is >> tmp.price)
{
is.get(dummy);
if (getline(is, tmp.seller)) {
book = tmp; // book = std::move(tmp)
return true;
}
}
return false;
}

int main() {
std::vector<Book> booklist;

// ...

Book book;
while (read_book(infile, book)) {
booklist.push_back(book);
}

// ...
}

你应该经常检查输入操作的结果,检查eof()在 C++ 流上没有进行正确的检查。

关于c++ - 使用文件 I/O C++ 时出现段错误 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23139648/

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