Что будет копировать пустую строку в другую строку? - PullRequest
0 голосов
/ 03 февраля 2019

Я только начал изучать программирование на Си.Когда я перехожу к String, я путаюсь с функцией 'strcpy'.Я попытался поменять местами первый аргумент и второй аргумент.Когда я запускаю программу, она просто показывает «S».Что это значит?

char s2[ ]= "Hello";
char s1[10];
strcpy(s2, s1);
printf("Source string = %s\n", s2);
printf("Target string = %s\n", s1);

Я думал, что результат будет нулевым.Но это просто показывает 'S'.

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

В C строки заканчиваются нулями.Это означает, что пустая строка является строкой, содержащей один символ «нулевой терминатор».

Когда копируется пустая строка, копируется один символ «нулевой терминатор».Строка назначения по-прежнему имеет адрес («указатель на символ строки» будет указывать на нулевой терминатор), а указатель на строку не будет равен NULL.

0 голосов
/ 03 февраля 2019

Исходя из операторов printf, у вас есть смешанные аргументы для strcpy.

Как сейчас, вы копируете s1 в s2.Однако массив s1 неинициализирован, поэтому содержащиеся в нем значения неопределены .

Чтобы скопировать s2 в s1, переключите параметры:

strcpy(s1, s2);

Если оставить все как есть, вам нужно явно установить s1 в пустую строку, чтобы получить согласованные результаты.

char s1[10] = "";
...