有个小问题
- C/C++ code
#include <string.h>#include <stdio.h>static const char *msg[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};char *get_a_day(int idx){ static char buf[20]; strcpy(buf, msg[idx]); return buf;}#include <stdio.h>int main(void){ printf("%s %s\n", get_a_day(0), get_a_day(1)); return 0;}为什么输出是Sun Sun 呢?
[解决办法]
你get_a_day 直接返回 static char* msg里的指针就可以啊.
你的buff被重复覆盖了.
[解决办法]
不是就怪了
[解决办法]
get_a_day(1)
get_a_day(0)
函数调用顺序,最后里面都是SUN
[解决办法]
- C/C++ code
#include <string.h>#include <stdio.h>static const char *msg[] = {"Sunday", "Monday", "Tuesday", "Wednesday","Thursday", "Friday", "Saturday"};char *get_a_day(int idx){ static char buf[20]; strcpy(buf, msg[idx]); return buf;}#include <stdio.h>int main(void){ printf("%s\n", get_a_day(0)); printf("%s\n", get_a_day(1)); return 0;}
[解决办法]
- Assembly code
printf("%s %s\n", get_a_day(0), get_a_day(1));013F1A0E push 1 013F1A10 call get_a_day (13F11C2h) 013F1A15 add esp,4 013F1A18 mov esi,esp 013F1A1A push eax 013F1A1B push 0 013F1A1D call get_a_day (13F11C2h) 013F1A22 add esp,4 013F1A25 push eax 013F1A26 push offset string "%s %s\n" (13F5AE8h) 013F1A2B call dword ptr [__imp__printf (13F8328h)]