C - указатель strcpy - PullRequest
       18

C - указатель strcpy

0 голосов
/ 03 апреля 2012

Я хочу спросить о strcpy. У меня проблема здесь. Вот мой код:

char *string1 = "Sentence 1";
char *string2 = "A";

strcpy(string1, string2);

Я думаю, что в моем коде нет проблем. Адрес первого символа в строке1 и строке2 отправляется функции strcpy. В этом коде не должно быть проблем, верно? Кто-нибудь, пожалуйста, помогите мне решить эту проблему или объяснить мне ..

Спасибо.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

Есть проблема - каждый из ваших указателей указывает на память, в которую вы не можете писать;они указывают на константы, которые компилятор встраивает в ваше приложение.

Вам необходимо выделить место в доступной для записи памяти (например, стек через char string1[<size>]; или куча через char *string1 = malloc(<size>);).Обязательно замените требуемым объемом буферного пространства и добавьте дополнительный байт хотя бы для завершения NULL.Если вы malloc(), то обязательно free() позже!

1 голос
/ 03 апреля 2012

Это дает неопределенное поведение. Компилятор может разрешить это из-за причуд истории (строковые литералы не const), но вы в основном пытаетесь перезаписать данные, которые на многих платформах просто невозможно изменить.

0 голосов
/ 03 апреля 2012

На страницах руководства Linux:

char * strcpy (char * dest, const char * src); Функция strcpy () копирует строку, на которую указывает src, включая завершающий нулевой байт ('\ 0'), в буфер, указанный на по судьбе Строки могут не перекрываться, и строка назначения dest должен быть достаточно большим, чтобы получить копию.

У вас проблема с указателем * dest, так как он указывает на строковый литерал вместо выделенной модифицируемой памяти. Попробуйте определить строку один как char string1[BUFFER_LENGTH]; или выделить ее динамически с помощью malloc().

...