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

一个C练习题目

2013-08-10 
请指教一个C练习题目/* ret_ptr.h */#ifndef RET_PTR_H#define RET_PTR_Hextern char *get_a_day(int idx)

请指教一个C练习题目
/* ret_ptr.h */
#ifndef RET_PTR_H
#define RET_PTR_H

extern char *get_a_day(int idx);

#endif
================================================================

/* ret_ptr.c */
#include <string.h>
#include "ret_ptr.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;
}

================================================================
/* main.c */
#include <stdio.h>
#include "ret_ptr.h"

int main(void)
{
     printf("%s %s\n", get_a_day(0), get_a_day(1));
     return 0;
}

我在DEV-CPP运行。结果是打印两次 sunday . 为啥不是sunday , monday ??
求大侠指点一下,实在是看不懂。。。
[解决办法]
个人理解,不知道对不对,如果不对请大神指点~
printf函数是从右往左执行,先执行get_a_day(1),执行完后buf存放的是monday,然后执行get_a_day(0),完成后buf存放的是sunday。最后执行打印操作,但是因为buf是静态变量,且get_a_day(0)和get_a_day(1)都指向buf,且buf中存放的是sunday,所以才打印出二个sunday~
解决办法可以如1楼所说~

热点排行