簡體   English   中英

試圖了解一個簡單的C復制功能

[英]Trying to understand a simple C copy function

我試圖理解從stdin復制字符的函數,但是我不明白while循環及其后的代碼.....
while循環在這里如何工作? 從我的理解這是什么意思,直到ith字符從to[]不等於ith字符from[]繼續加入i我是正確的?
如果是,則兩個變量中的第ith個字符如何相等?
這是一個簡短的代碼:

void copy(char to[] , char from[])   
{
    int i;
    i = 0 ;
    while ((to[i] = from[i]) != '\0')
        ++i;
}

重寫它可能會有所幫助:

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

你現在明白了么?

while循環中的條件使用以下事實:在C中,賦值表達式具有一個值,該值是在賦值中分配的值。 這意味着while循環中的條件可以實現為具有副作用,即源到目標的元素方式分配。 總的來說,循環的實際工作是在其條件下進行的,而循環的主體只是增加了索引i

這就是作業的工作方式。 賦值(a = b)返回一個值(b)。 您在此處所做的事情是從[i]移到[i],然后將返回值(在本例中是從[i])與字符'\\ 0'進行比較。

空字符(0x00)終止任何字符串,因此是您要復制的字符串的終止字符。

但是,我會謹慎使用此代碼,因為您將不檢查數組的界限,並且如果遇到的字符串未正確以null終止,或者在[]字符串太短。

它首先from ith字符復制to ith位置,並檢查其是否為字符串的結尾。 如果不是,則它遞增i(現在將指向下一個字符的位置或索引)並執行此操作,直到其與字符串匹配,即'\\0'為止。

您的代碼與

void copy(char to[] , char from[])   
{
    int i;
    i = 0 ;
    while (from[i] != '\0')
      {
        to[i] = from[i];
        ++i;
      }
    to[i] = '\0';
}

因此,盡管它不在to的結尾,但仍繼續從in復制到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM