像下面的问题一样,我必须使用指针概念在mystrcpy2函数中将数组从一个复制到另一个,这与不使用指针概念的mystrcpy函数不同。无论如何,我输入了我的答案," dest = src;"这似乎过于简单,但对我来说是正确的答案。但是当我输入输入时,比如" Hello World",它显示为" Hello World ???"就像后面的奇怪字母一样。但是当我输入像" abc"这样的简短单词时,结果就是" abc。" 这仅仅是计算机问题还是我做错了什么?
我还想知道" while(* src)* dest ++ = * src ++;"也适用?
/ *完成mystrcpy2()函数,该函数将src指向的以null结尾的字符串复制到dest指向的字符串。 mystrcpy2()应该使用基于索引的数组遍历方法的mystrcpy()给出相同的结果。 请注意,在实现mystrcpy2()时不允许添加局部变量。 编写并提交您的" mystrcpy2()"的源代码。功能。 * /
tblDept
答案 0 :(得分:1)
mystrcpy2
的实施不会复制任何内容。事实上,它什么都不做。执行dest = src
时,您正在复制src
变量指向的内存位置,而不是该位置的数据。要实际复制数据,您需要使用'*'来指向指针。所以你会这样做
*dest = *src;
这会将数据从src
复制到dest
。但它只复制一个字符。您需要增加src
和dest
,然后再次执行此操作以复制下一个字符,并且您需要继续执行此操作,直到您点击字符串终止符,即直到*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++;
}
(在这种情况下,参数被声明为指针,以便可变)