我已經寫了兩段代碼,我打算輸出相同的輸出,但容易混淆,輸出不同。修改和打印字符串不會導致預期的輸出
代碼的第一片:
#include<stdio.h>
int main(){
char a[]="abc";
char *p=&a;
char c=++(*p);
printf("%c,%s\n",c,p);
return 0;
}
此輸出以下:
B,BBC
第二件的代碼:
#include<stdio.h>
int main(){
char *p="abc";
char c=++(*p);
printf("%c,%s\n",c,p);
return 0;
}
,其輸出:
一個,ABC
什麼在第二代碼段,其防止字符串的第一個字符從遞增發生?
它可能發生在某些系統中,因爲第二個代碼的「abc」位於無法更改的內存區域中。在第一個應用程序中,字符串「abc」在堆棧中始終可以修改。 – rbelli 2012-04-02 16:08:34