char * string1 = malloc(sizeof(char));
Не делай этого. Это выделяет место для одного символа и устанавливает string1
для указания на это пространство. Это почти никогда не полезно в программе. Обычно вы хотите установить char *
так, чтобы он указывал на больше места, чем один символ, потому что вы собираетесь работать с более чем одним символом. Или вы можете установить string1
равным NULL
, что означает, что в данный момент он ни на что не указывает.
char * string1 = malloc(sizeof(char));
char * string2 = malloc(sizeof(char));
string1 = "hello";
Это вызывает «утечку памяти», означающую, что программа потеряла след памятиmalloc
.
Строковый литерал, такой как "hello"
, фактически является массивом char
, существующим в течение всего времени выполнения программы. При использовании в таком выражении оно автоматически преобразуется в указатель на первый символ этого массива. Таким образом, string1 = "hello";
устанавливает string1
на адрес этого символа. Это заставляет его забыть о своем предыдущем значении от malloc(sizeof(char))
.
string1 = string2; // error in the future code
Это может быть, а может и не ошибаться. Он устанавливает string1
так, чтобы он указывал на то же место, что и string2
. Таким образом, string1
и string2
будут тогда указывать на одну и ту же строку, поэтому они, конечно, указывают на одинаковые строки, поскольку строка равна себе.
Иногда при работе с указателями на char
мыхочу изменить указатель так, чтобы он указывал на другую строку, но иногда мы хотим скопировать строку из одного места в другое. Итак, правильность string1 = string2;
для вашей программы зависит от того, что вы пытаетесь сделать. Вам нужно будет предоставить гораздо больше информации в вашем вопросе о контексте и о том, что вы пытаетесь сделать в своей программе.