qt — Хотите узнать длину буфера переполнения стека

Я новичок в C ++ и программировании, и я хотел бы знать, есть ли способ получить длину указателя.
Допустим, Myheader — это структура с различными типами данных внутри.
Мой код выглядит так:

char *pStartBuffer;
memcpy(pStartBuffer, &MyHeader, MyHeader.u32Size);

Поэтому я хочу знать длину буфера, чтобы я мог скопировать данные в файл, используя функцию записи QT.

file.write(pStartBuffer, length(pStartBuffer));

Как я могу это сделать?

-1

Решение

Указатели не знают его выделенный размер.

Вы можете использовать std::vector которые следят за размером для вас:

std::vector<char> pStartBuffer(MyHeader.u32Size);
memcpy(pStartBuffer, &MyHeader, MyHeader.u32Size);

И последнее:

file.write(pStartBuffer.data(), pStartBuffer.size());
1

Другие решения

Нет никакого способа найти длину буфера, заданного только указателем. Если ты определенный что это строка, вы можете использовать одну из функций длины строки, или вы можете отслеживать длину буфера самостоятельно.

1

Указатель не имеет «длины». Что вам нужно, это длина массива, на который указывает указатель.

Нет, вы не можете извлечь эту информацию из указателя.

Если массив содержит допустимую символьную строку с нулевым символом в конце, затем вы можете получить длину этой строки, повторяя ее, пока не найдете нулевой символ, который strlen делает.

Если нет, то обычно вы сохраняете длину в переменной при выделении массива. Что является одной из вещей, которые std::vector или же std::string будет делать для вас, что больше подходит для вашего использования.

0
По вопросам рекламы [email protected]