2014-09-27 19 views
-2

爲什麼下面的代碼的輸出是「pune」?瞭解使用C語言中的指針交換兩個字符串

#include <stdio.h> 
#include<conio.h> 
int main() 
{ 
char str1[]="bombay"; 
char str2[]="pune"; 
char *s1=str1,*s2=str2; 
while(*s1++=*s2++); 
printf("%s",str1); 
printf("\n"); 
getch(); 

}

+0

他們沒有被交換。 – 2014-09-27 10:56:20

+2

但是你期望輸出是什麼? – 2014-09-27 10:57:19

+0

此代碼'while(* s1 ++ = * s2 ++);'一開始就無法讀取 – 2014-09-27 10:58:49

回答

1

你只是複製S2到S1。所以很顯然輸出應該是「pune」

+1

他很幸運pune比bombay小 – 2014-09-27 11:02:24

+0

任何人都可以在這裏解釋while循環的工作原理嗎? – RKS10222 2014-09-27 11:12:03

+0

它的終止條件是(* s1 == 0),雖然這沒有發生,但是您正在將每個字符從s2複製到s1並增加兩個指針。 – MSH 2014-09-27 11:18:32

0

你已經寫了while(* s1 ++ = * s2 ++); 末尾的分號意味着while被視爲語句而不是循環。 所以你試圖將s2的每個字符拷貝到s1。所以,在將'pune'複製到s1之後,在s1的末尾會出現一個空字符。現在null也被複制到s2中。在打印字符串s1時,%s將打印該字符串,直到找到空。因此你得到了pune作爲輸出。