【发布时间】:2019-11-20 01:36:50
【问题描述】:
我正在学习 C 并且遇到困难。基本上我声明了 2 个数组,我想通过使用指针将一个数组的所有 char 值复制到另一个数组中。我正在利用数组名称是指向其第一个元素的指针这一事实。有人可以帮忙看看吗?谢谢。
#include<stdio.h>
#include<string.h>
char *mystrcopy(char*p, char*q); //function prototype
int main(void)
{
char s1[20] = "Hello\n";
char s2[20] = "Bye\n";
puts(s1); //print Hello
mystrcopy(s1, s2); //call function using pointers s1 and s2
puts(s1); //I want this to print Bye after function has run
system("pause"); //"press any key to continue...."
return 0;
}
char *mystrcopy(char*s1, char*s2)
{
int i;
for (i = 0; s1 + i; i++) //for loop continues as long as s1+1 not 0
s1 + i = s2 + i; //error says s1 is not a modifiable lvalue
return s1; //I know this could be a void function but I choose not to
}
我认为这很好,因为 (s1 + i) 是指向数组 s1 中的第 i 个元素的指针,并将其替换为 s2 中的第 i 个元素。
我尝试过使用
*(s1+i) = *(s2+i)
相反,将 s2 的地址复制到 s1 中,但我得到了同样的错误。
编辑:
上面的for循环中的代码确实有效
*(s1+i) = *(s2+i)
我认为这不起作用,因为循环一直在进行。不过,感谢大家回答我关于可修改 l 值的问题。
【问题讨论】:
-
赋值的左边必须是一个变量。尝试使用数组表示法来访问您想要的字符,而不是尝试指针运算。
-
"s1+i" 将评估为真,直到此表达式评估为 0。一旦您修复此编译错误,除非您也修复此错误,否则在现代 64 位平台上,此
for循环将平均执行 9223372036854775808 次(根据我的计算),这将需要……一点时间。幸运的是,它会比这更快地崩溃。你需要准确地解释你期望这个函数做什么,以便任何人也能帮助你解决这个问题。 -
可能你忘了修复循环条件
-
罗伯特-谢谢你的评论。我已经使用数组表示法做了这个练习。我只是想用指针挑战自己。
-
山姆-谢谢你的评论。哇,这么大的数字。你在这个循环上是正确的。我想通过 s1 循环它,它只有 20 个元素,当它到达数组末尾的换行符时循环退出,但我意识到这不是零。谢谢你。另外,我在代码右侧留下的 cmets 中解释了我希望代码做什么,最值得注意的是: puts(s1); //我希望在函数运行后打印 Bye