| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3222 人关注过本帖
标题:关于printf函数.大家请看看.............
只看楼主 加入收藏
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
 问题点数:0 回复次数:32 
关于printf函数.大家请看看.............
今天偶尔看到这么个程序:
#include <stdio.h>

char  *test(char *p)
{
    int i;
    char a[100]="I love you!";
    p=a;
    printf("%s\n",p);
    return(p);
}
int main(void)
{
    char *p, *q;
    p="there is a example";
    q=test(p);
    printf("\n截后的串为:%s\n",q);
    return 0;
}

如果这样运行,程序会输出两个"I love you!";
但是,如果你把test函数里面的printf语句注释掉,那么程序将会输出乱码.

我大胆作了个猜测如下:
如果你不加printf在test里面,那么由于在test函数运行期间,a有定义,而在其结束之后,a将是未定义的,所以p也就是未定义的,亦即返回值是未定义的,所以,主函数会输出乱码.
如果你加printf在test里面,由于prinitf叫做"格式化输出语句",所以我想,问题是不是"格式化"引起的.因为格式化,所以printf会按%s,也就是字符串的格式来格式p,在该语句执行之后,p就变成了一个字符串,而返回值也就变成了指向该字符串的首地址.所以主函数会正确运行.

各位,兄弟我也是个新手,不知道所作的猜测是否正确.所以,请各位明白该问题的指教,谢谢!!!!!

就当作是对一个新手的支持!!!!!!!!!!!
搜索更多相关主题的帖子: printf 函数 
2008-05-13 13:41
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
为什么没有人回阿???帮忙看看阿!!!!!

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-13 14:37
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
应该输出乱码才是正确的,因为a[100]是局部变量,当函数返回的时候,这段空间会回收,所以那里的值已经不是原来的值了.
我用VC调试过了,即使子函数里面有printf,那段内存也是已经改变的了,不过奇怪的就是为什么主函数里面的printf还能正常输出,这个我也解释不了

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-05-13 15:34
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
呵呵,看来这个问题很头痛阿,先谢谢极光,咱们继续等待高手........

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-13 15:45
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
我失望了。。。。。

论坛里面的高手呢???能不能回答一下阿???

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-14 09:59
netsolo
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2008-3-6
收藏
得分:0 

我无语了......................居然这么用
2008-05-14 10:14
feelerly
Rank: 1
来 自:GZ
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-5-1
收藏
得分:0 
可以先让 函数中参数指针 p 进行自减, 也就是向后移动一个字节, 然后再把数组赋给 p . 至于原因, 貌似3F说了, 估计还有指针的偏移问题吧.
2008-05-14 10:33
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
还是不太明白。。。。。。

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-14 10:48
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
这个问题我知道答案但我也懒得解答
我只想告诉你假如你不是想当黑客或者做操作系统、编译器、补丁程序之类
那么错误的程序不管输出结果是什么,也没有意义

[color=white]
2008-05-14 11:09
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
算了吧,俗话说得好,"求人不如求己".我不知道答案的原因是我的基础知识学得还很烂.
不过我会自己找出答案来的.学好基础就行,我相信.

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-14 11:19
快速回复:关于printf函数.大家请看看.............
数据加载中...
 
   



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

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