Преимущество использования функции strcpy в C - PullRequest
1 голос
/ 08 декабря 2010
void main()
{
    char s[100]="hello";
    char *t;

    t=(char*)malloc(100);
    strcpy(t,s);
}

В качестве альтернативы мы можем присвоить s t следующим образом: t=s;. В чем недостаток использования альтернативы?

Ответы [ 4 ]

5 голосов
/ 08 декабря 2010

При использовании простого присваивания, такого как t = s, вы фактически не копируете строку, а ссылаетесь на одну и ту же строку, используя два разных имени.

1 голос
/ 09 декабря 2010

Значением переменной t является местоположение одного или нескольких смежных char с. Когда вы делаете t = s, вы копируете местоположение символа s[0] в t (и заменяете старое значение t, полученное из malloc()). t[0] и s[0] теперь относятся к одному и тому же символу - изменение одного будет видно через другой.

Когда вы используете strcpy(t, s), вы копируете действительные символы из одного места в другое.

Первое похоже на размещение двух номеров домов в одном доме. Последнее похоже на создание точной копии всей мебели в одном доме и размещение ее во втором.

1 голос
/ 08 декабря 2010

Если вы назначите t=s, каждое изменение, примененное к блоку памяти, указанному t, повлияет на s, что может быть не тем, что вы хотите.

Кроме того, вы можете посмотреть это сообщение .

0 голосов
/ 09 декабря 2010

strcpy() функция используется для копирования одной строки в другую, вы неправильно использовали ее здесь. При работе с указателями вы могли бы легко сделать это, например,

t=s;

Указатель 't' получает базовый адрес строки 's', и именно для этого нужны указатели. С другой стороны, вы работаете с strcpy. Вы создаете хранилище указателей ВЕСЬ СТРОКА.

...