0

我对以下代码有疑问:

#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 复制到我的变量中时,我遇到了分段错误!

4

2 回答 2

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);

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

于 2013-02-02T23:32:49.250 回答
0

你需要fopen作为开始。出现在哪里ISBNPrefix.cpp

于 2013-02-02T23:34:09.370 回答