2014-09-27 50 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作为输出。