【问题标题】:How can i access the char array inside of an std::string?如何访问 std::string 内的 char 数组?
【发布时间】:2020-07-09 19:55:43
【问题描述】:

我的任务是在 Linux 中编写一个将存储设备模拟为文件的文件系统。

我得到的一个功能需要读取“文件”中的数据。为此,我有一个应该返回std::string 的函数。

如何使用以下函数从文件中读取数据 直接进入std::string?

void read(int addr, int size, char *ans)

有没有办法将std::string 中的字符数组作为参数传递给这个函数? 到目前为止我遇到的所有方法和成员函数都只返回const char*,这在这种情况下不起作用。

谢谢!

【问题讨论】:

    标签: c++ arrays stdstring


    【解决方案1】:

    执行此操作的常规方法是将指针传递给字符串的第一个字符。这保证有效,因为标准保证std::basic_string 中的字符连续存储([basic.string]/2)。

    因此,

    read(addr, str.size(), & str[0]);
    

    有效,但前提是您之前已将字符串大小调整为非零大小。此外,您的read 函数不会告诉您读取了多少 个字符。您的 IO API 中需要有一些功能来告诉您这一点。

    【讨论】:

    • 因为 c++17 str.data() 是一个可行的选择。
    【解决方案2】:

    实际上,这样做是个坏主意,因为那时std::string 类不知道插入了多少个字符。最好创建本地缓冲区std::array<char, 256> buf,将其传递给函数,然后使用std::string(buf.data, buf.size()) 将其放入std::string

    【讨论】:

    • 这并不能解决问题。 read 函数需要告诉您插入了多少个字符。 OP 给出的签名不会这样做,但也许另一个函数会这样做。无论如何,没有理由不直接插入字符串。
    猜你喜欢
    • 2011-10-26
    • 1970-01-01
    • 2021-05-29
    • 2013-08-26
    • 2022-01-05
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多