C變量定義內存分配機制

心動 11:19:02
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
int i = 1;
char buf[4];
strcpy(buf, "AAAA");
printf("%d/n", i);
return 0;
}
輸出結果是i=0
我知道是buf的空間分配不夠,爲什麼會導致 i=0;

??
 
Wilson 11:31:18
我是猜想的:
1、跟變量的壓棧方式有關。
2、字符串的結尾標誌爲 '/0'
3、超出4位的第五位被設置 '/0',而這第五位正好是      i的內存地址

所以導致 i=0

如果你把 int i = 1 ;和 char buf[4] ;調換位置,就不會出現這種情況了。

這情況較內存益處,c字符串處理不當長出現,是一種漏洞,常被黑客所利用執行任意代碼  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章