C Memset выход - PullRequest
       19

C Memset выход

0 голосов
/ 09 декабря 2011
#include <stdio.h>
#include <string.h>

int main() {
  char* p = new char[10];
  memset(p,0,10);
  printf("%c",*p);
}

Полагаю, memset устанавливает каждый байт, начиная с p до 0. Я немного удивлен, когда ничего не распечатал. Что на земле происходило для memset?

Ответы [ 2 ]

6 голосов
/ 09 декабря 2011

memset устанавливает все байты в 0;таким образом, когда вы разыменовываете p, вы получаете char со значением 0 (байт NUL), и в большинстве систем печать такого char не производит видимого вывода.Если вы хотите напечатать числовое значение байта, используйте printf("%d", *p);.

0 голосов
/ 12 мая 2015

ANS: 0 (int data) типизируется в эквивалентный символ (ASCII), а затем копируется во все 10 массивов памяти.По совпадению эквивалент 0 (int) char является нулевым символом `'\ 0'.Итак, на экране ничего не отображается.Логически мы можем сказать, что на экране выводится ноль.

{ie; (char)0 is equivalent to '\0' (null character)}

ОБЪЯСНЕНИЕ:

memset(p,0,10);

Наблюдайте за вторым параметром 0, который является целым числомбайт), однако memset () должен будет установить 0 данных в каждом байтовом массиве p.Как 2-байтовое целое число может быть скопировано в 1-байтовое пространство памяти?Это невозможно.

Итак, метод memset () сначала вводит данные int в char (1 байт), а затем записывает char (1 байт) в каждый байт этого массива памяти.

Примечание: memset () не будет содержать нулевой символ в конце строки.Поэтому мы должны сделать это явно.

...