当我的程序在gdb中被反汇编时,我可以看到buf的地址被压入堆栈,但是我没有看到格式字符串被压到它上面.这是什么原因?它是一个聪明的编译器优化?
我已经尝试编译一些printf语句的不同变体,看看我是否可以模仿"%s"字符串(或它的地址)没有被压入堆栈,但我无法做到.
这是程序代码:
int main(int argc, char **argv) {
char buf[128];
if(argc < 2) return 1;
strcpy(buf, argv[1]);
printf("%s\n", buf);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
用gcc 4.5.2编译,32位linux
为什么我能够分配一个函数,该函数返回一个没有为函数指针指定参数的int,该函数指针返回一个int但是接受一个int参数?
例如,当我这样做时:
int f()
{ return 0;}
int (*ptr)(int) = f;
Run Code Online (Sandbox Code Playgroud)
编译器没有给我任何警告