Возможно, это просто нехватка кофе, но я пытаюсь создать 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() (и это уродливо).
Как я могу сделать это в современном С++?