一个很简单的程序,输出结果不懂。。
/* 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;
}
为什么输出的都是Sunday啊???
------解决方案--------------------因为两次函数调用都执行完之后才执行printf,然后两次函数调用返回的是同一个static buffer的地址,所以。
------解决方案--------------------哥们儿 你的函数写的有问题,static char buf[20]; buf是静态变量
当然每次调用结果都是一样的
------解决方案--------------------
main里面的printf函数会先对两次函数调用进行求解然后再调用printf。一般是按照从右向左的顺序求解,这样两次函数运行完就剩下sunday的值了,然后printf通过指向static成员的指针取到sunday