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

fopenまた、とfscanfは C スタイルの関数であることに注意してください。C++ を使用しているため、ファイルからデータを読み取る方法は他にも便利です。をご覧くださいstd::ifstream。また、C++ で C ヘッダーを使用する場合は、C++ ラッパーを含める必要があります: cstdiocstdlibなど。

于 2013-02-02T23:32:49.250 に答える
0

最初にfopenが必要です。どこISBNPrefix.cppに写真が入りますか?

于 2013-02-02T23:34:09.370 に答える