Инициализация указателя на строку - PullRequest
0 голосов
/ 06 августа 2011

У меня есть очень основное сомнение. Скажем, я объявляю указатель на строку.

char *data;

и выделите память следующим образом

data = malloc(13*sizeof(char));

Мой вопрос: как мне инициализировать строку? Есть

data = NULL;

что нужно сделать.

Спасибо

Ответы [ 6 ]

2 голосов
/ 06 августа 2011

Если вы просто хотите пустую строку, data[0] = '\0' будет хорошо. Установка data = NULL, как показано в примере, приведет к утечке памяти.

2 голосов
/ 06 августа 2011

Если вы хотите инициализировать строку пустой строкой, то

*data = '\0';

- правильная вещь.То, что вы сделали, указали в переменной значение NULL вместо 13 байт памяти, которые вы выделили.

1 голос
/ 06 августа 2011

Если под инициализацией вы имеете в виду сделать все нули, то:

memset(data, 0, 13);

сделает это.

Или, как сказал @ Griffin , используя calloc вместо malloc для выделения и инициализации области одновременно.

1 голос
/ 06 августа 2011

Вы должны установить использование memset

0 голосов
/ 06 августа 2011

Нет, рассмотрим функции memset / memcpy или strncpy.С

memset(void *b, int c, size_t len);

вы можете инициализировать область памяти, с помощью memcpy или strncp вы можете копировать данные в область памяти.Если вы имеете дело со строками, вы должны использовать strncpy.

Веселиться

0 голосов
/ 06 августа 2011

Посмотрите на функцию free .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...