试图理解一个简单的C复制功能

时间:2014-06-10 12:58:47

标签: c function while-loop void

我正在尝试理解从stdin复制字符的函数,但是我无法理解while循环和完全跟随它的代码.....
while循环如何工作? 根据我的理解,这意味着直到ith的{​​{1}}字符不等于to[] ith的字符继续添加from[]我是否正确?<登记/> 如果是,那么两个变量中的第i个字符是如何相等的?
这是一个简短的代码:

i

5 个答案:

答案 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';
}

因此,虽然它不在最后,但它继续从中复制到。