我正在尝试理解从stdin复制字符的函数,但是我无法理解while循环和完全跟随它的代码.....
while循环如何工作?
根据我的理解,这意味着直到ith
的{{1}}字符不等于to[]
ith
的字符继续添加from[]
我是否正确?<登记/>
如果是,那么两个变量中的第i个字符是如何相等的?
这是一个简短的代码:
i
答案 0 :(得分:3)
重写它可能会有所帮助:
do{
to[i] = from[i];
++i;
}while (from[i-1] != '\0') // -1 here because we incremented i in the line before and need to check the copied position
你现在明白了吗?
答案 1 :(得分:1)
while
循环中的条件使用以下事实:在C中赋值表达式具有值,该值是赋值中指定的值。这意味着while
循环中的条件可以实现为具有副作用,即源到目的地的元素分配。总的来说,循环的实际工作是在它的条件下进行的,而循环的主体只是增加了索引i
。
答案 2 :(得分:1)
这是作业的工作方式。赋值(a = b)返回值(b)。你在那里做的是从[i]移动到[i],并将返回值(在这种情况下,从[i])与字符'\ 0'进行比较。
空字符(0x00)终止任何字符串,因此是您正在复制的字符串的终止字符。
但是,我要小心这段代码,因为你没有检查数组上的边界,如果你遇到一个没有正确空终止的字符串,就会让你自己处于分段错误状态,或者to []字符串太短了。
答案 3 :(得分:0)
首先将from
ith
字符复制到to
ith
位置并检查它是否为字符串的结尾。如果没有那么它会增加i(现在将指向下一个字符的位置或索引)并执行此操作,直到它匹配字符串的结尾,即'\0'
。
答案 4 :(得分:0)
您的代码与
相同void copy(char to[] , char from[])
{
int i;
i = 0 ;
while (from[i] != '\0')
{
to[i] = from[i];
++i;
}
to[i] = '\0';
}
因此,虽然它不在最后,但它继续从中复制到。