C указатели: копировать строки - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь скопировать строку, содержащуюся в

char *src 

в

char *dst

, это моя функция, но она не компилируется

char *mystrncpy(char *dst, char *src, size_t len)
{
    char *temp = dst;

    char *p = dst;
    size_t i = 0;
    for (p = dst; i < len; p += 1)
    {
        *p = *(src + p);
        i += 1;
    }

    return *temp;
}

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы перестарались.

Вы, вероятно, хотите это:

char *mystrncpy(char *dst, char *src, size_t len)
{
   while (len > 0)
   {
     *dst++ = *src++;
     len--;
   }

   return dst - len;
}

Это абсолютно неправильно

return *temp;

*temp - это charне указатель, поэтому return temp; будет правильным.

Кстати: строго говоря, мы не копируем строку, так как строка в C является NUL-концевой последовательностью символов.Здесь мы просто копируем len байтов.

0 голосов
/ 22 ноября 2018

Вы действительно близко;ваша ошибка в этой строке:

*p = *(src + p);

Подумайте, почему вы разыменовываете *(src + p) ... помните, где находится область памяти персонажа, которого вы пытаетесь скопировать?

Кроме того, ваша функция должна либо вернуть void, поскольку нигде нет оператора return, либо вернуть dst.Кроме того, вам не нужно p < src в вашей петле защиты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...