从文件中读取时出现分段错误

时间:2013-02-02 23:28:29

标签: c++ file-io

我遇到以下代码的问题:

#include <iostream>
#include <stdio.h>
#include "ISBNPrefix.h"
using namespace std;

int main() {

    FILE* file = NULL;
    int area = 0, i = 0;
    long s;

    file = open("swagger.txt");
    fscanf(file, "%ld", &s);
    cout << s << endl;
}

这里是ISBNPrefix.cpp:

#include <iostream>
#include <stdio.h>
#include "ISBNPrefix.h"
using namespace std;

FILE* open(const char filename[]) {

    FILE* file = NULL;
    file = fopen("filename", "r");

    if (file != NULL)
        return file;
    else return NULL;
}

我的ISBNPrefix.h

FILE* open (const char filename[]);

swagger.txt的内容是:123456789

当我尝试运行它以测试它是否将123456789复制到我的变量中时会出现分段错误!

2 个答案:

答案 0 :(得分:3)

您的功能在打开文件时遇到问题:

FILE* open(const char filename[]) {
    FILE* file = NULL;
    file = fopen("filename", "r"); <-- here

应为file = fopen(filename, "r");

如果没有文件,你还设计了open函数来返回NULL,但是一旦你调用它就不会检查它的返回值:

file = open("swagger.txt");
if (file == NULL) ...        <-- you should check the return value
fscanf(file, "%ld", &s);

另请注意,fopenfscanf是C风格的函数。由于您使用的是C ++,因此还有其他更方便的方法可以从文件中读取数据。看看std::ifstream。此外,当您在C ++中使用C头时,应该包括他们的C ++包装器:cstdiocstdlib等。

答案 1 :(得分:0)

首先需要fopenISBNPrefix.cpp在哪里出现?