我遇到以下代码的问题:
#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复制到我的变量中时会出现分段错误!
答案 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);
另请注意,fopen
和fscanf
是C风格的函数。由于您使用的是C ++,因此还有其他更方便的方法可以从文件中读取数据。看看std::ifstream
。此外,当您在C ++中使用C头时,应该包括他们的C ++包装器:cstdio
,cstdlib
等。
答案 1 :(得分:0)
首先需要fopen。 ISBNPrefix.cpp
在哪里出现?