我試圖理解下面的例子。我有點困惑這將如何實際工作。
void strcpy(char *s, char *t)
{
while (*s++ = *t++)
;
}
任何幫助都很好。謝謝!
我試圖理解下面的例子。我有點困惑這將如何實際工作。
void strcpy(char *s, char *t)
{
while (*s++ = *t++)
;
}
任何幫助都很好。謝謝!
請記住,C中的字符串只是一個指向字符列表的指針,以\0
結尾。
還記得\0
(空字節)是falsy,也就是說,如果它在一個條件,那個條件將是錯誤的。
該函數獲取一個指向源字符串開始的指針和一個指向目標字符串開始的指針。
然後它循環遍歷源字符串中的每個字符,將字符複製到目標字符串。當評估條件時,後遞增++
將使指針前進一個字節。
就我所知,此實現也有一個問題。如果源字符串不是完全相同的長度,則末尾不會有空終止符。爲了安全起見,您應該在目標字符串的末尾添加一個\0
。
*s++ = *t++
的值是作業右側的值*t
。因此,當* t爲0時,即在t指向的字符串的末尾,循環將終止。將t
指向的字符分配給s
指出的字符後,該條件也會遞增t
(和s
)的值。循環體中沒有任何東西,條件本身就是拷貝。