Как заставить назначить один символ * другому символу * - PullRequest
0 голосов
/ 07 октября 2019

как сделать st1 = st2, если они оба char *

char * string1 = malloc(sizeof(char));
char * string2 = malloc(sizeof(char));
string1 = "hello";
string2 = "world";

string1 = string2; // error in the future code 

как сделать это соответствующим образом?

Ответы [ 2 ]

2 голосов
/ 07 октября 2019
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; для вашей программы зависит от того, что вы пытаетесь сделать. Вам нужно будет предоставить гораздо больше информации в вашем вопросе о контексте и о том, что вы пытаетесь сделать в своей программе.

1 голос
/ 07 октября 2019

Используйте strcpy() для копирования строк.

char *string1 = malloc(6);
char *string2 = malloc(6);

strcpy(string1, "hello");
strcpy(string2, "world");

strcpy(string1, string2);

Убедитесь, что вы выделяете достаточно места для самой длинной строки, которую вы собираетесь скопировать, плюс дополнительный байт для нулевого терминатора.

...