Когда вы объявляете массив:
char command[100];
компилятор выделяет для него память (в данном случае 100 символов), а command
указывает на начало этой памяти. Вы можете получить доступ к выделенной памяти:
command[0] = 'a'; // OK
command[99] = 'A'; // OK
command[100] = 'Z'; // Error: out of bounds
но вы не можете изменить значение command
:
command = NULL; // Compile-time error
Память будет автоматически освобождена, когда command
выйдет из области видимости.
Когда вы объявляете указатель:
char *commandptr;
вы создаете только одну переменную для указания на char
s, но она еще ни на что не указывает. Попытка использовать его без инициализации это ошибка:
commandptr[0] = 'A'; // Undefined behaviour; probably a segfault
Вам нужно выделить память самостоятельно, используя malloc
:
commandptr = malloc(100);
if (commandptr) {
// Always check that the return value of malloc() is not NULL
commandptr[0] = 'A'; // Now you can use the allocated memory
}
и освободите его, когда закончите с ним:
free(commandptr);