gpt4 book ai didi

c++ - 在只读场景中何时需要以空字符结尾的字符串?

转载 作者:行者123 更新时间:2023-12-03 07:55:41 25 4
gpt4 key购买 nike

我一直在玩 std::string_view 库,我一直在考虑更改我一直在努力使用的代码库 std::string_view越多越好。然而,在我读过的关于何时何地使用 std::string_view 的主题的许多主题中而不是 const std::string & .我看到很多答案说,“当你不需要一个空终止的字符串时。”所以当我开始在网上搜索时,“你什么时候需要一个以空字符结尾的字符串?”我还没有真正遇到关于这个主题的任何有用的答案。

我可以想到一个外部库的示例,您将链接到它需要 std::string .在这种情况下,您将需要一个以空字符结尾的字符串,因为该库需要它。我想另一个例子是如果你需要修改字符串本身,但我们不会通过 const & 传递它。如果我们需要修改它。

那么什么时候需要使用以空字符结尾的字符串呢?

我看过的链接:

  • How exactly is std::string_view faster than const std::string&?
  • When would I pass const& std::string instead of std::string_view?
  • Why only string view?
  • Is there sense in using const std::string& arguments in C++17?
  • 最佳答案

    When do you need a null terminated string?



    每当您使用的 API 表明您需要它时,您就需要一个以空字符结尾的字符串。此要求在 C 接口(interface)中无处不在,并且在某些文档中未明确说明。如果函数参数是 char* (可能是 const),并且没有长度参数,除非文档另有说明,否则您应该假设要求。

    让我们使用函数 execve (来自 POSIX 标准)作为示例:
    int execve(const char *pathname, char *const argv[], char *const envp[]);

    如果您将非空终止参数作为 pathname 传递,那么您的程序的行为将是未定义的。

    关于c++ - 在只读场景中何时需要以空字符结尾的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59001406/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com