ここに私は非常に単純なプログラムを持っています、そして出力は私にとって非常に奇妙です、
#include "stdio.h"
#include "string.h"
void func_stack();
int main(int argc, char *argv[]) {
func_stack();
}
void func_stack() {
int a = -1;
char s[4];
int b = -1;
strcpy(s,"1234");
printf("a+b result to %d\n",a+b);
}
strcpy 関数は、後の int 変数 "b" に対して '\0' オーバーライドを使用し、奇妙な計算結果を返すと思いますが、x86 Linux マシンでコンパイルした後も、結果として -2 が得られました。同じ結果です。 strcpy が発生しないためです。
なぜこれが起こるのか誰でも説明できますか?