首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

有个小疑点

2012-03-16 
有个小问题C/C++ code#include string.h#include stdio.hstatic const char *msg[] {Sunday, Mon

有个小问题

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)] 

热点排行