c++ - 在结构中存储可变大小的字符串

标签 c++ string

我正在使用流读取 C++ 中的文件,特别是 fstream,而不是 ifstream。

blah blah blah\n
blah blah\n
blah blah blah blah \n
end

这一遍又一遍地重复着

  1. 每行有可变数量的 blah,
  2. 每一端之间的行数恒定,end是这里的分隔符

我想读取一组数据,然后将其存储在字符数组中,采用 C 风格结构。我开始尝试使用 getline() 但分隔符只能是一个字符,而不是三个。我显然不能尝试仅使用 read() 来读取一组字节数,因为每个集合的字节数都不同。

因此,我对这里要做的最简单(也是最可靠)的事情感到困惑。我是否应该调用 getline 直到找到“结束”字符串,同时一遍又一遍地附加每个字符串?

我尝试了一个 2D 字符数组,但复制到它有点麻烦。我可以在这里使用 strncpy 吗?我认为这行不通

char buf[10][10];
strncpy(buf[1], "blah blah",10);

我在这里有一些想法,但我不确定哪一个(或我没有想到的)是最好的。

编辑: 所以这是针对网络应用程序的,因此字符数组(或字符串)的大小应该始终相同。此外,结构中不应有指针。

相关问题:char数组和std::string在内存中的存储方式是一样的吗?我总是认为 std::string 有一些开销。

最佳答案

好吧,你说“在 C 风格的结构中”,但也许你可以只使用 std::string

#include <fstream>
#include <iostream>
#include <string>
#include <vector>

int main(void)
{
    std::fstream file("main.cpp");
    std::vector<std::string> lines;

    std::string line;
    while (getline(file, line))
    {
        if (line == "end")
        {
            break;
        }

        std::cout << line << std::endl;
        lines.push_back(line);
    }

    // lines now has all the lines up-to
    // and not including "end"

/* this is for reading the file
end

some stuff that'll never get printed
or addded blah blah
*/
};

关于c++ - 在结构中存储可变大小的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1828021/

相关文章:

c++ - 从头开始在汇编中编写 for 循环

c++ - (速度)优化影响代码的意外部分

c++ - 我如何使用 C++ 获得微秒和纳秒的两个时间间隔之间的差异

string - 如何在 bash 中的两个函数之间传递包含空格的字母数字变量?

c# - 串行 key 生成异或字符串加密

c++ - Git Diff Indent/Pretty Print/Beautify Before Diff

c++ - 逆向工程得到函数原型(prototype)

python - 如何按字符串拆分列表

c# - 在 C# 中将字符串转换为 int

C程序计算模式字符串的出现次数