心動 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字符串處理不當長出現,是一種漏洞,常被黑客所利用執行任意代碼