日期:2014-05-16  浏览次数:20737 次

一个很简单的程序,输出结果不懂。。
/* 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