C指针:复制字符串

C指针:复制字符串,c,string,pointers,C,String,Pointers,我正在尝试复制中包含的字符串 char *src 进入 这是我的函数,但不编译 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; }

我正在尝试复制中包含的字符串

char *src 
进入

这是我的函数,但不编译

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;
}

你真的很接近;您的错误在这一行:

*p = *(src + p);
想想你为什么要取消引用*src+p。。。记住,要复制的角色的内存位置在哪里


此外,函数应该返回void,因为任何地方都没有return语句,或者返回dst。同样,你不需要在你的循环保护中使用p你真的很接近了;您的错误在这一行:

*p = *(src + p);
想想你为什么要取消引用*src+p。。。记住,要复制的角色的内存位置在哪里

此外,函数应该返回void,因为任何地方都没有return语句,或者返回dst。此外,在循环保护中不需要p你做得太过分了

你可能想要这个:

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

   return dst - len;
}
这是完全错误的

return *temp;
*temp是字符而不是指针,因此返回temp;这是正确的

顺便说一句:严格来说,我们不是复制字符串,因为C中的字符串是以NUL结尾的字符序列。这里我们只是复制len字节。

您做得太多了

你可能想要这个:

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

   return dst - len;
}
这是完全错误的

return *temp;
*temp是字符而不是指针,因此返回temp;这是正确的



顺便说一句:严格来说,我们不是复制字符串,因为C中的字符串是以NUL结尾的字符序列。这里我们只是复制len字节。

*p=*src+p;这不应该是*p=*src+i;相反?是的,它确实编译了,但没有达到预期效果p