如何仅使用指针重写此strcpy()函数?

时间:2018-04-07 03:46:46

标签: c

这是strcpy代码

char *strcpy(char *dest, const char* src)
#endif
{
    char *ret = dest;
    while (*dest++ = *src++)
        ;
    return ret;
}

我尝试使用swap方法和指针实现它

char *strcpy(char *dest, char *src)
{
char *ret = dest;
dest = src;
src = ret;
return ret
}

但交换方法不起作用,任何人都可以告诉我使用swap方法执行strcpy()函数是否合适?如果没有,我怎么能只使用ponters表示法编写这段代码?

3 个答案:

答案 0 :(得分:2)

  

任何人都可以告诉我使用交换方法执行是否合适   strcpy()函数?

不,它不合适,因为它不是strcpy()。我认为您最好再次阅读strcpy() man page - 其原因是它被命名为strcpy()(这是"字符串副本的缩写")而不是swap_char_pointers()

  

如果没有,我怎么能用ponters表示法编写这段代码?

您发布的第一个strcpy()实现仅使用指针表示法,并且工作正常。

答案 1 :(得分:1)

strcpy应该让你包含src内容。如果您更改指针本身,则不会获得副本。 您可以尝试以下方式:

int x = 0;
while (src[x] != '\0'){
dest[x] = src[x];
x++;
}
dest[x] = '\0';

您不必触摸src。请记住,dest只是字符串的地址,如果要复制,则无法更改。

答案 2 :(得分:1)

destscr是函数内的局部变量。您对它们所做的更改不会反映在外面。

此外,C中的字符串是字符数组,您不能更改数组的起始地址,它类似于常量。