[英]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.