标题:函数内 定义 static的问题
只看楼主
轮椅之星
Rank: 2
等 级:论坛游民
帖 子:18
专家分:42
注 册:2012-8-16
结帖率:100%
已结贴  问题点数:20 回复次数:5 
函数内 定义 static的问题
程序代码:
  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 static const char *msg[] = {"sunday", "monday", "tuesday", "wednesday",
  5                               "thursday", "friday", "saturday"};
  6 char *get_a_day(int index)
  7 {
  8       static char buf[20];
  9       strcpy(buf, msg[index]);

 10       return buf; 

 11 }     

 12 

 13 int main(int argc, const char *argv[])

 14 {

 15       printf("%s, %s\n", get_a_day(0), get_a_day(1));

 16       printf("%s, %s, %s\n", get_a_day(2), get_a_day(3), get_a_day(4));

 17       

 18       return 0;

 19 }  

程序运行结果是:sunday, sunday
                         :tuesday, tuesday, tuesday
求解释
搜索更多相关主题的帖子: include tuesday 
2012-12-18 12:29
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
得分:7 
这个和static应该没有关系吧,你把printf打印分开写就可以了。

Go Go Go
2012-12-18 12:40
轮椅之星
Rank: 2
等 级:论坛游民
帖 子:18
专家分:42
注 册:2012-8-16
得分:0 
回复 2楼 zhaoya881010
我想知道为什么会出现这种结果, 设想的结果不是这样的。  为什么会产生覆盖??求解释
2012-12-18 15:06
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
得分:0 
printf函数机制应该是先从右读取数据压入堆栈,然后栈出。

Go Go Go
2012-12-18 15:19
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:7 
以下是引用zhaoya881010在2012-12-18 15:19:48的发言:

printf函数机制应该是先从右读取数据压入堆栈,然后栈出。
简单的搜了一下

这个问题就很明了了
printf 确实是从右向左依次入栈  但是楼主例子中的三个函数的返回值确是全局变量  地址固定

所以在出栈时,就只剩下了最后的信息了

DO IT YOURSELF !
2012-12-18 15:28
_peak
Rank: 5Rank: 5
来 自:90后
等 级:禁止访问
帖 子:83
专家分:347
注 册:2012-12-12
得分:7 
printf

团结,进步,务实,创新!
2012-12-18 15:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-391814-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.139278 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved