请指教一个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楼所说~