Sai*_*rmo 7 c++ string string-view c++17
我一直在研究该std::string_view库,并且一直在考虑更改我一直在努力使用的代码库std::string_view。但是,在我阅读过的许多主题中,有关何时何地使用std::string_view而不是的主题const std::string &。我已经看到许多答案说:“何时不需要以null结尾的字符串。” 因此,当我开始在网上搜索“何时需要以null结尾的字符串?”时,在这个问题上,我还没有真正有用的答案。
我可以想到一个外部库的示例,您需要链接到该外部库std::string。在那种情况下,您将需要一个以null结尾的字符串,因为该库需要它。我猜另一个例子是,如果您需要修改字符串本身,但是const &如果我们需要修改它,那么我们就不会通过。
那么什么时候需要使用以null结尾的字符串?
我看过的链接:
什么时候需要以null结尾的字符串?
每当您使用的API说需要时,您都需要一个以null结尾的字符串。此要求在C接口中无处不在,并且在某些文档中未明确说明。如果函数参数是一个char*(可能是const),并且没有长度参数,则除非文档中另有说明,否则您应该承担此要求。
让我们以该功能execve(来自POSIX标准)为例:
int execve(const char *pathname, char *const argv[], char *const envp[]);
Run Code Online (Sandbox Code Playgroud)
如果您将非空终止参数作为传递pathname,则程序的行为将是不确定的。
实际上很容易知道。如果您要调用的函数仅接受一个c字符串(char*/ const char*),则您需要一个以null终止的字符串,因为这是知道字符串结尾的唯一方法。
如果您改用带char*/ const char*加上大小的函数,或者仅用两个指针标记数据的开头和结尾,则不需要以null结尾的字符串,因为您可以/无需迭代就可以得到字符串的大小空终止符。
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |