Визуальный Использование sizeof () на пустом указателе, указывающем на буфер (строку & quot; & quot;) в C ++, чтобы получить размер в байтах?

void * ptr0 = (void*)"Buffer_1";
int size0 = sizeof(ptr0);
// WILL THIS RETURN THE NUMBER OF BYTES OCCUPIED BY THE MEMORY POINTED BY ptr0?

Мое требование
1) хранить некоторые данные в буфере & создать void * указатель на него, который я делаю в 1-й строке.
2) Позже я хочу получить размер этого буфера в байтах. 2-я строка сделает эту работу.

0

Решение

sizeof возвращает размер, требуемый типом. Поскольку тип вы передаете sizeof в этом случае указатель, он будет возвращать размер указателя.

Если вам нужен размер данных, на которые указывает указатель, вам придется запомнить их, сохранив их явно.

6

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

Нет, это просто вернет размер вашего указателя в байтах. С помощью sizeof чтобы получить размер массива будет работать только на массивах, объявленных как это

char szArray[10];

не на массивах, созданных динамически

char* pArray = new char[10];

sizeof(szArray);  // number of elements * sizeof(char) = 10
sizeof(pArray);   // sizeof the pointer
2

sizeof () работает во время компиляции. так sizeof(ptr0) вернет 4 или 8 байтов, как правило. вместо этого используйте strlen? или на самом деле хранить нет. байтов, хранящихся (void *) в отдельной переменной.

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