Ваш первый фрагмент - это определение переменной с инициализацией;второй фрагмент - это определение переменной без инициализации.
Правильный способ инициализации строки - предоставить инициализатор при ее определении.Инициализация его в 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 */
}