2013-06-24 2 views
-2
scanf ("%d", &i); 

эти коды являются одинаковыми // динамический буфер распределения (строка символов) size = i;динамический буфер распределения (строка символов) size = i; используя malloc

char *buffer = malloc (sizeof((*buffer)*(i+1))); 

free(buffer); 

char * buffer; 
buffer = (char*) malloc (i+1); 
free(buffer); 

если да, то это более безопасно (лучше)?

+5

Помните, что 'SizeOf (Char)' является * * гарантированно будет один. И не бросайте результат функции, возвращающей 'void *' (например, 'malloc'). –

+1

buffer = malloc (sizeof (char) * (i + 1)); –

+1

'sizeof ((* buffer) * (i + 1))' такое же, как 'sizeof (int)', ваши скобки не упорядочены правильно. – interjay

ответ

3

Лучшая практика:

char *buffer = malloc(i + 1); 

Там нет необходимости подавать возвращаемое значение из malloc и sizeof(char) определяется как 1 по стандарту C.

0

sizeof(char) всегда 1 стандарт. Таким образом, вместо того, чтобы использовать

char *buffer = malloc (sizeof((*buffer)*(i+1)));

вы можете написать это без sizeof(*buffer) как:

char *buffer = malloc(i + 1);