爲什麼下面的代碼的輸出是「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();
}
爲什麼下面的代碼的輸出是「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();
}
你已經寫了while(* s1 ++ = * s2 ++); 末尾的分號意味着while被視爲語句而不是循環。 所以你試圖將s2的每個字符拷貝到s1。所以,在將'pune'複製到s1之後,在s1的末尾會出現一個空字符。現在null也被複制到s2中。在打印字符串s1時,%s將打印該字符串,直到找到空。因此你得到了pune作爲輸出。
他們沒有被交換。 – 2014-09-27 10:56:20
但是你期望輸出是什麼? – 2014-09-27 10:57:19
此代碼'while(* s1 ++ = * s2 ++);'一開始就無法讀取 – 2014-09-27 10:58:49