我想创建一个函数,可以连续读取一个字符一个字符的文件,直到遇到某个特定的字符。
这是我在类 FileHandler 中的方法。
char* tysort::FileHandler::readUntilCharFound(size_t start, char seek)
{
char* text = new char;
if(this->inputFileStream != nullptr)
{
bool goOn = true;
size_t seekPos = start;
while (goOn)
{
this->inputFileStream->seekg(seekPos);
char* buffer = new char;
this->inputFileStream->read(buffer, 1);
if(strcmp(buffer, &seek) != 0)
{
strcat(text, buffer); // Execution stops here
seekPos++;
}
else
{
goOn = false;
}
}
}
//printf("%s\n", text);
return text;
}
我测试了这个功能,它确实有效。这是一个读取文件内容直到找到换行符 '\n'
的示例。
size_t startPosition = 0;
char* text = this->fileHandler->readUntilCharFound(startPosition, '\n');
但是,我确信代码中某处存在不正确的地方,因为如果我在循环 block 中使用这些方法,应用程序就会挂起。我想“不正确”的事情是关于指针的,但我不知道确切的位置。能帮我指点一下吗?
最佳答案
C++ 提供了一些易于使用的解决方案。例如:
istream& getline (istream& is, string& str, char delim);
在您的情况下,参数相当于您的 text
变量,而 delim 相当于您的 seek
参数。此外,getline 的返回值在某种程度上等同于您的 goOn
标志(关于使用 getline 的返回值检查 EOF 和 IO 错误的正确模式,有很好的常见问题解答)
关于C++ 读取文件直到找到字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27624174/