也许只是因为缺少咖啡,但我正在尝试从已知最大长度的以空字符结尾的char
数组中创建std::string
,但我不知道该怎么做。
auto s = std::string(buffer, sizeof(buffer));
..是我最喜欢的候选人,但由于C++字符串不以null结尾,因此此命令将复制sizeof(buffer)
个字节,而不考虑其中包含的任何'\0'。
..是我最喜欢的候选人,但由于C++字符串不以null结尾,因此此命令将复制sizeof(buffer)
个字节,而不考虑其中包含的任何'\0'。
auto s = std::string(buffer);
从 buffer
复制,直到找到 \0
。这几乎是我想要的,但我不能信任接收缓冲区,所以我想提供最大长度。
当然,现在我可以这样整合 strnlen()
:
auto s = std::string(buffer, strnlen(buffer, sizeof(buffer)));
但这似乎很糟糕 - 它会两次遍历缓冲区,而且我必须处理 C 语言的工具库,比如 string.h
和 strnlen()
(而且这很难看)。
在现代 C++ 中,我应该如何实现这个功能?
char buffer[n+1]; buffer[n] = 0;
,然后使用std::string(buffer)
来生成字符串,因为它始终以空字符结尾。 - jingyu9575