我正在尝试从文件中读取字符,但是当我在main外部声明了变量时,我收到了分段错误。如果我删除它们并尝试从文件中读取,一切都会顺利进行。我正在将dev c ++ 5.7.1与mingw 4.8.1便携式版本一起使用。
我将问题隔离为仅声明了几个变量并读取了文件代码。这段代码来自我正在尝试开发的一个更大的应用程序(我自己学习游戏开发)。
#include <iostream>
#include <fstream>
bool running = true;
bool musicPlaying = true;
bool read = false;
int levelNumber;
int barWidth = 40;
int barHeight = 10;
float timeElapsed;
int main(int argc, char** argv) {
std::ifstream file;
file.open("test.txt");
std::cout<<file.is_open()<<std::endl;
char c;
while(!file.eof()){
file.get(c);
std::cout<<c;
}
return 0;
}
我得到输出:1,文件已打开。但是没有字符从文件中读取。Debug information
为什么会这样?
欢迎使用StackOverflow ...
首先,就像您所说的编译器非常旧。版本4.8.1,而当前的G ++版本是9.2。
尝试防止使用全局变量。这是允许的,但不是很好的封装设计。它们不是存储在堆栈或普通堆中,而是存储在内存中一些晦涩的部分。
无论如何,您没有共享test.txt,所以我制作了自己的包含文件
acb
并清理了代码
#include <iostream>
#include <fstream>
int main() {
std::ifstream file;
file.open("test.txt");
std::cout << file.is_open() << '\n';
char c;
while (file >> c) std::cout << c;
}
我的输出是
1
abc
即使您的原始代码读取到文件末尾,我至少也希望能有一些输出。编译器始终保持更新。也许您实际上遇到了一个旧错误...您真的应该更新
根据您对我的评论的回答,对bool read
进行除比例会覆盖read
使用的fread
功能。重命名它,或将其移动到另一个名称空间或类。我的编译器都无法重现相同的问题。