Правильный способ инициализации строки в C - PullRequest
12 голосов
/ 03 ноября 2010

Я видел код людей как:

char *str = NULL;

, и я видел это также,

char *str;

Интересно, как правильноинициализация строки?и когда вы должны инициализировать строку с / без NULL?

Ответы [ 11 ]

0 голосов
/ 03 ноября 2010

Ваш первый фрагмент - это определение переменной с инициализацией;второй фрагмент - это определение переменной без инициализации.

Правильный способ инициализации строки - предоставить инициализатор при ее определении.Инициализация его в NULL или что-то еще зависит от того, что вы хотите с ним делать.

Также помните о том, что вы называете «строкой».C не имеет такого типа: обычно «string» в контексте C означает «массив [некоторое количество] char».В приведенных выше фрагментах у вас есть указатели на char.

Предположим, у вас есть программа, которая запрашивает имя пользователя в argv [1] и копирует его в строку "name".Когда вы определяете переменную name, вы можете оставить ее неинициализированной или инициализировать ее значением NULL (если это указатель на символ) или инициализировать именем по умолчанию.

int main(int argc, char **argv) {
    char name_uninit[100];
    char *name_ptr = NULL;
    char name_default[100] = "anonymous";

    if (argc > 1) {
        strcpy(name_uninit, argv[1]); /* beware buffer overflow */
        name_ptr = argv[1];
        strcpy(name_default, argv[1]); /* beware buffer overflow */
    }

    /* ... */

    /* name_uninit may be unusable (and untestable) if there were no command line parameters */
    /* name_ptr may be NULL, but you can test for NULL */
    /* name_default is a definite name */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...