Я должен переписать для назначения функцию, которая имитирует поведение strncpy, после многих проб и ошибок, некоторой внешней помощи, вот окончательный код:
15 char *ft_strncpy(char *dest, char *src, unsigned int n)
16 {
17 unsigned int i;
18 unsigned int size;
19
20 i = 0;
21 size = 0;
22 while (src[i] && i < n)
23 {
24 dest[i] = src[i];
25 i++;
26 }
27 while (i < n)
28 {
29 dest[i] = '\0';
30 i++;
31 }
32 return (dest);
33 }
Это работает без нареканий, но яне получайте эту часть:
while (i < n)
{
dest[i] = '\0';
i++;
}
В этот момент значение i должно быть (n - 1), верно?Итак, '\0' goes into dest[n-1]
и цикл заканчивается, потому что i becomes equal to n
, а затем функция завершается.
У нас остается строка, которая будет выглядеть примерно так:
"string copied\0not copied part"
И будет напечатанокак: string copiednot copied part
.
Мой вопрос:
Почему вместо * while или dest[n]='\0'
вместо цикла while возвращается string copied
вместо 'строка копируется не копируется часть ', когда они в основном делают одно и то же?
Почему \0
кажется "игнорируемым" при выводе после цикла while, когда он считается полнымостановка, когда я использую dest [n-1] = '\ 0' вместо?
Вот основная / альтернативная функция, которую я использовал для запуска теста и попытался понять:
int main()
{
char str[] = "test de chaine";
char *str2 = "chaine de test";
ft_strncpy(str, str2, 6);
printf("%s", str);
return 0;
}
char *ft_strncpy(char *dest, char *src, unsigned int n)
{
unsigned int i;
unsigned int size;
i = 0;
size = 0;
while (src[i] && i < n)
{
dest[i] = src[i];
i++;
}
dest[n-1] = '\0';
return (dest);
}