Это мой код. Я пытаюсь смоделировать strcpy (). Этот код работает, но у меня есть пара вопросов.
#include <stdio.h>
#include <stdlib.h>
char *strcpy(char *d, const char *s);
int main()
{
char strOne[] = "Welcome to the world of programming!";
char strTwo[] = "Hello world!";
printf("String One: %s\n", strOne);
printf("String Two before strcpy(): %s\n", strTwo);
strcpy(strTwo, strOne);
printf("String Two after strcpy(): %s\n", strTwo);
return 0;
}
char *strcpy(char *d, const char *s)
{
while (*s)
{
*d = *s;
d++;
s++;
}
*d = 0;
return 0;
}
Когда * s увеличивается до позиции, где '\ 0' хранится в массиве, это когда условие становится ложным из-за '\ 0'? Читает ли while '\ 0' или просто '0'?
, в то время как условие 'true' будет истинным, если оно читает '1'. Все предыдущие значения * s должны читаться как одиночные символы в условии while, но l oop выполняется в любом случае. Почему это происходит? Все ли отдельные символы из массива * s указывают равны значению '1'?
Что именно делает *d = 0;
? Насколько я понимаю, процесс копирования завершается при выходе из l oop. Так почему удаление *d = 0
приводит к отображению неверного вывода?
Вывод без *d = 0
:
String Two before strcpy(): Hello world!
String Two after strcpy(): Welcome to the world of programming! programming!
Вывод с *d = 0
:
String Two before strcpy(): Hello world!
String Two after strcpy(): Welcome to the world of programming!