C++ 读取文件直到找到字符

标签 c++ file

我想创建一个函数,可以连续读取一个字符一个字符的文件,直到遇到某个特定的字符。

这是我在类 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/

相关文章:

c++ - C++ 编译器可以规范化 Unicode 标识符吗?

c++ - 如何在 RHEL c/cpp 应用程序上测试连接超时

c++ - 如何根据 Prop 名称动态设置对象的属性?

php - 在 PHP 中复制大文件(超过 2 GB)

python - 在 SVN 目录中搜索具有特定文件扩展名的文件并复制到另一个文件夹?

c++ - STL什么是随机访问和顺序访问?

具有静态类成员的 C++ 模板类

c++ - 从 txt 文件中读取以字符分隔的元素

java - 是否有一种新的 Java 8 方法来检索文件扩展名?

file - 如何计算两个license.txt文件之间的相似度?