使用指针将数组复制到数组

时间:2017-11-13 13:03:42

标签: c arrays pointers strcpy

像下面的问题一样,我必须使用指针概念在mystrcpy2函数中将数组从一个复制到另一个,这与不使用指针概念的mystrcpy函数不同。无论如何,我输入了我的答案," dest = src;"这似乎过于简单,但对我来说是正确的答案。但是当我输入输入时,比如" Hello World",它显示为" Hello World ???"就像后面的奇怪字母一样。但是当我输入像" abc"这样的简短单词时,结果就是" abc。" 这仅仅是计算机问题还是我做错了什么?

我还想知道" while(* src)* dest ++ = * src ++;"也适用?

/ *完成mystrcpy2()函数,该函数将src指向的以null结尾的字符串复制到dest指向的字符串。 mystrcpy2()应该使用基于索引的数组遍历方法的mystrcpy()给出相同的结果。 请注意,在实现mystrcpy2()时不允许添加局部变量。 编写并提交您的" mystrcpy2()"的源代码。功能。 * /

tblDept

2 个答案:

答案 0 :(得分:1)

mystrcpy2的实施不会复制任何内容。事实上,它什么都不做。执行dest = src时,您正在复制src变量指向的内存位置,而不是该位置的数据。要实际复制数据,您需要使用'*'来指向指针。所以你会这样做

*dest = *src;

这会将数据从src复制到dest。但它只复制一个字符。您需要增加srcdest,然后再次执行此操作以复制下一个字符,并且您需要继续执行此操作,直到您点击字符串终止符,即直到*src == 0。这是完整的实施。

void mystrcpy2(char *dest, char *src)
{
    while (*src != 0) {
        *dest = *src;
        dest++;
        src++;
    }
    // don't forget to add a terminator
    // to the copied string
    *dest = 0;
}

在更短的版本中,这是完全相同的事情。

void mystrcpy2(char *dest, char *src)
{
    while (*(dest++) = *(src++));
}

答案 1 :(得分:0)

void mystrcpy2(char *dest, char *src)
{
    dest = src;
}

main()
{
...
mystrcpy2(mystr2, mystr1);
...
}

当您致电mystrcpy2(mystr2, mystr1);并在dest = src中执行mystrcpy2时,这不会对mystr2中的main指针生效。

如果你想改变main中的mystr2,你应该这样做:

main() {
  char mystr1[256];
  char **mystr2;
  ...
  mystrcpy2(mystr2, mystr1);
  puts(*mystr2);
}

void mystrcpy2(char **dest, char *src)
{
    *dest = src;
}

另一方面,在另一个版本的strcpy中你不需要2个局部变量,只有1个就足够了。

void mystrcpy(char dest[], char src[])
{
    int i;
    for(i=0;src[i];i++)
        dest[i] = src[i];
}

甚至没有:

void mystrcpy(char *dest, char *src)
{
    while(*src)
        *dest = *src, dest++, src++;
}

(在这种情况下,参数被声明为指针,以便可变)