Как все уже говорили, в C ++ массив символов с нулевым символом в конце называется строкой. Размер буфера, в котором хранятся символы, может быть больше, чем «длина строки» в этих терминах. Например:
char inBuf [] = {0x01, 0x02, 0x03, 0x00, 0x00, 0x04, 0x05};
size_t bufSize = sizeof(inBuf);
size_t rawLen = strlen(inBuf);
... в этом случае размер inBuf равен 7, но strlen () возвращает 3.
Используя ASCII, вы не можете вставлять NULL в строку. Тем не менее, вы можете использовать std :: string, если хотите встраивать NULL. std :: string обычно полезен в любом случае, так что проверьте это. Полный рабочий пример:
#include <cstdlib>
#include <string>
#include <iostream>
using namespace std;
char inBuf [] = {0x01, 0x02, 0x03, 0x00, 0x00, 0x04, 0x05};
int main()
{
size_t bufSize = sizeof(inBuf);
size_t rawLen = strlen(inBuf);
string ss(inBuf, sizeof(inBuf));
size_t ssLen = ss.length();
cout << "Buffer Size = " << bufSize << ", Raw string length = " << rawLen << ", std::string length = " << ssLen;
return 0;
}
Вывод программы:
Размер буфера = 7, длина необработанной строки =
3, std :: длина строки = 7