首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

一个很简单的程序,输出结果不懂。解决办法

2012-08-15 
一个很简单的程序,输出结果不懂。。/* ret_ptr.h */#ifndef RET_PTR_H#define RET_PTR_Hextern char *get_a_

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

热点排行