使用字符串从文件中读取专辑信息时调用 Abort

Posted

技术标签:

【中文标题】使用字符串从文件中读取专辑信息时调用 Abort【英文标题】:Abort Called when using Strings to Read Album Information from a file 【发布时间】:2015-10-25 21:02:46 【问题描述】:

当我运行我的代码时已经调用了 abort,尽管它构建成功。谁能给我提示如何使我的代码更好地运行以便不调用 abort ? 它引用了两个文本文件,但这是我迄今为止的代码:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;
int main()

    ifstream fin("Album Name1.txt");
    string album_name; 
    string artist = album_name.substr(0, album_name.find("-"));
    cout << "Artist : " << artist << endl;
    string album = album_name.substr(album_name.find("-"), album_name.rfind("-"));
    cout << " Album Title: " << album << endl;
    string song = album_name.substr(album_name.length(), album_name.rfind("-"));
    cout << " Song Title : " << song << endl;
    string time = album_name.substr(album_name.find("2"), (album_name.find("2")));
    string minutes = time.substr(0, 0);
    string seconds = time.substr(1, 2);
    string minutes_seconds = minutes + ":" + seconds;
    cout << "Run Time: " << minutes_seconds << endl;
    cout << "Copyright (c) Bruce Springsteen, 1984";
    fin.close();
    fin.clear();
    ifstream ifin("Album Name2.txt");
    string album2_name;
    string artist2 = album2_name.substr(0, album2_name.find("-"));
    cout << "Artist : " << artist2 << endl;
    string album2 = album2_name.substr(album2_name.find("-"), album2_name.rfind("-"));
    cout << " Album Title: " << album2 << endl;
    string song2 = album2_name.substr(album2_name.length(), album2_name.rfind("-"));
    cout << " Song Title : " << song2 << endl;
    string time2 = album2_name.substr(album2_name.find("2"), (album2_name.find("2")));
    string minutes2 = time2.substr(0, 0);
    string seconds2 = time2.substr(1, 2);
    string minutes_seconds2 = minutes2 + ":" + seconds2;
    cout << "Run Time: " << minutes_seconds2 << endl;
    cout << "Copyright (c) Maroon 5, 2004";
    ifin.close();
    return 0;

【问题讨论】:

请不要在没有上下文的情况下转储整个代码清单。在寻求帮助之前将您的代码编辑为Minimal, Complete, and Verifiable example。 如果您能告诉我们程序在正常工作时应该做什么,这可能会有所帮助。另外,请包括输入文件结构的示例。最后,仅仅通过查看您的代码,它看起来根本没有使用ifstreams。查看cplusplus.com/reference/fstream/ifstream 获取提示 它应该从文本文件中读取有关艺术家的专辑详细信息,然后在 cout 中列出它们。 【参考方案1】:

您忘记设置或读取专辑名称,因此整个算法正在处理一个空字符串。

假设您要从输入文件中读取专辑名称,您应该这样写:

ifstream fin("Album Name1.txt");
string album_name; 
std::getline(fin,album_name);

【讨论】:

以上是关于使用字符串从文件中读取专辑信息时调用 Abort的主要内容,如果未能解决你的问题,请参考以下文章

php使用cURL读取XML字节

XCode OCUnit 在运行任何测试代码之前崩溃并出现 Abort 陷阱:6

JAVA输入/输出流程序例题(文件和目录字节流字符流)

从“无符号”字节流中读取 32 位有符号值

文件的输入流

流概述与字节流输入输出