Я новичок в C ++ и программировании, и я хотел бы знать, есть ли способ получить длину указателя.
Допустим, Myheader — это структура с различными типами данных внутри.
Мой код выглядит так:
char *pStartBuffer;
memcpy(pStartBuffer, &MyHeader, MyHeader.u32Size);
Поэтому я хочу знать длину буфера, чтобы я мог скопировать данные в файл, используя функцию записи QT.
file.write(pStartBuffer, length(pStartBuffer));
Как я могу это сделать?
Указатели не знают его выделенный размер.
Вы можете использовать std::vector
которые следят за размером для вас:
std::vector<char> pStartBuffer(MyHeader.u32Size);
memcpy(pStartBuffer, &MyHeader, MyHeader.u32Size);
И последнее:
file.write(pStartBuffer.data(), pStartBuffer.size());
Нет никакого способа найти длину буфера, заданного только указателем. Если ты определенный что это строка, вы можете использовать одну из функций длины строки, или вы можете отслеживать длину буфера самостоятельно.
Указатель не имеет «длины». Что вам нужно, это длина массива, на который указывает указатель.
Нет, вы не можете извлечь эту информацию из указателя.
Если массив содержит допустимую символьную строку с нулевым символом в конце, затем вы можете получить длину этой строки, повторяя ее, пока не найдете нулевой символ, который strlen
делает.
Если нет, то обычно вы сохраняете длину в переменной при выделении массива. Что является одной из вещей, которые std::vector
или же std::string
будет делать для вас, что больше подходит для вашего использования.