fra*_*ans 14 c++ arrays string char c++11
也许这只是缺少咖啡,但我正在尝试std::string
从char
已知最大长度的空终止数组创建一个我不知道的,如何做到这一点.
auto s = std::string(buffer, sizeof(buffer));
Run Code Online (Sandbox Code Playgroud)
..是我最喜欢的候选者,但由于C++字符串不是以空值终止的,因此该命令将复制sizeof(buffer)
字节而不管任何包含的'\ 0'.
auto s = std::string(buffer);
Run Code Online (Sandbox Code Playgroud)
.. 发现buffer
直到\0
找到.这几乎是我想要的,但我不能相信接收缓冲区,所以我想提供一个最大长度.
当然,我现在可以strnlen()
像这样集成:
auto s = std::string(buffer, strnlen(buffer, sizeof(buffer)));
Run Code Online (Sandbox Code Playgroud)
但是,这似乎是肮脏的-它遍历缓冲区两次,我必须处理C-工件,如string.h
和strnlen()
(和它的丑陋).
我如何在现代C++中做到这一点?
Joh*_*nck 19
const char* end = std::find(buffer, buffer + sizeof(buffer), '\0');
std::string s(buffer, end);
Run Code Online (Sandbox Code Playgroud)