В дополнение к необходимости предоставить доступное для записи хранилище для sen1
, вы также должны проверить, чтобы обеспечить str2 != NULL
в вашей функции перед разыменованием str2
(в противном случае, даже если вы исправите все другие ошибки - вероятнее всего, возникнет ошибка segfault) )
Например, в своем коде вы можете определить константу для использования при установке размера sen1
массива (или вы можете выделить хранилище с помощью malloc()
, calloc()
или realloc()
- сохранить на потом). Используя массив, который вы можете использовать, например,
#include <stdio.h>
#include <stdlib.h>
#define MAXC 64 /* if you need a constant, #define one (or more) */
...
int main (void)
{
char sen1[MAXC] = "Hello";
char *sen2 = "Friends";
mystrcpy (sen1, sen2);
printf ("The result: %s\n", sen1);
}
В вашей функции strcpy убедитесь, что str2
не NULL
перед использованием str2
в вашей функции, например
char *mystrcpy (char *dest, const char *src)
{
char *p = dest;
if (!src || !dest) { /* ensure src or dest is not NULL */
fputs ("error: src or dest parameters NULL in mystrcpy().\n", stderr);
exit (EXIT_FAILURE);
}
do /* loop */
*p++ = *src; /* copy each char in src to dest */
while (*src++); /* (including the nul-termianting char) */
return dest; /* return pointer to dest */
}
Теперь вы скопируете исходную строку в строку назначения в вашей (переименованной) функции mystrcpy()
, получив ожидаемые результаты:
Пример использования / Вывод
$ ./bin/mystrcpy
The result: Friends
Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.