Обнулить указатель на весь символ - PullRequest
2 голосов
/ 25 марта 2011

Я пытаюсь обнулить указатель char. Если я выполню заявление:

memset(myCharPointer, 0, sizeof(myCharPointer));

это только нули из первых 4 байтов, потому что это размер char указателя в моей системе.

Так, как я могу гарантировать, что данные полностью установлены в 0? Установка NULL не уничтожает весь указатель char.

Ответы [ 5 ]

9 голосов
/ 25 марта 2011

sizeof(myCharPointer) даст вам sizeof(char*), который является размером указателя , который обычно составляет четыре байта.Sizeof (char) даст вам 1 байт.

Чтобы сделать memset, вам нужно знать, как долго ваши данные.например,

memset(myCharPointer, 0, myCharPointerLen);

5 голосов
/ 25 марта 2011

Если вы знаете длину массива символов, на который вы указываете, вы можете сделать это:

memset(myCharPointer, 0, sizeof(*myCharPointer) * length);

Кроме того, я считаю, что вы должны использовать sizeof содержимое указателя вместо содержимого самого указателя.

2 голосов
/ 25 марта 2011

Вам необходимо сохранить размер myCharPointer в некоторой переменной или константе при его создании.Затем вы передаете это функции memset.

1 голос
/ 19 марта 2012

Вы также можете использовать strlen (myCharPointer);который вернет размер до завершения NULL.Вы могли бы даже вставить его прямо в memset,

memset(myCharPointer, 0, strlen(myCharPointer));

или просто

ULONG size = strlen(myCharPointer);
memset(myCharPointer, 0, size);

Предыдущие солютоны - это один из способов, сохраняя размер в переменной, но ваш char * равен NULL.прекращено т.е.(с байтами, представленными символами)

A, K, J, P, 2, Q, M, NULL

strlen будет считаться с вашего адреса char * доNULL, вуаля

1 голос
/ 25 марта 2011

Вы должны указать, сколько байтов обнулить, поэтому sizeof (myCharPointer) * <длина до нуля>.

...