Возможно, это просто нехватка кофе, но я пытаюсь создать std::string
из массива char
с нулевым завершением с известной максимальной длиной, и я не знаю, как это сделать.
auto s = std::string(buffer, sizeof(buffer));
.. был моим любимым кандидатом, но так как строки С++ не имеют нулевого окончания, эта команда будет копировать sizeof(buffer)
байты независимо от содержащихся в нем "\ 0".
auto s = std::string(buffer);
.. копии с buffer
пока не будет найдено \0
. Это почти то, что я хочу, но я не могу доверять буфере приема, поэтому я хотел бы предоставить максимальную длину.
Конечно, теперь я могу интегрировать strnlen()
следующим образом:
auto s = std::string(buffer, strnlen(buffer, sizeof(buffer)));
Но это кажется грязным - он дважды пересекает буфер, и мне приходится иметь дело с C-артефактами, такими как string.h
и strnlen()
(и это уродливо).
Как я могу сделать это в современном С++?