当前位置: 代码迷 >> C语言 >> 关于printf函数.大家请看看.............
  详细解决方案

关于printf函数.大家请看看.............

热度:343   发布时间:2008-05-13 13:41:14.0
关于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  函数  

----------------解决方案--------------------------------------------------------
为什么没有人回阿???帮忙看看阿!!!!!
----------------解决方案--------------------------------------------------------
应该输出乱码才是正确的,因为a[100]是局部变量,当函数返回的时候,这段空间会回收,所以那里的值已经不是原来的值了.
我用VC调试过了,即使子函数里面有printf,那段内存也是已经改变的了,不过奇怪的就是为什么主函数里面的printf还能正常输出,这个我也解释不了
----------------解决方案--------------------------------------------------------
呵呵,看来这个问题很头痛阿,先谢谢极光,咱们继续等待高手........
----------------解决方案--------------------------------------------------------
我失望了。。。。。

论坛里面的高手呢???能不能回答一下阿???
----------------解决方案--------------------------------------------------------

我无语了......................居然这么用
----------------解决方案--------------------------------------------------------
可以先让 函数中参数指针 p 进行自减, 也就是向后移动一个字节, 然后再把数组赋给 p . 至于原因, 貌似3F说了, 估计还有指针的偏移问题吧.
----------------解决方案--------------------------------------------------------
还是不太明白。。。。。。
----------------解决方案--------------------------------------------------------
这个问题我知道答案但我也懒得解答
我只想告诉你假如你不是想当黑客或者做操作系统、编译器、补丁程序之类
那么错误的程序不管输出结果是什么,也没有意义

[color=white]
----------------解决方案--------------------------------------------------------
算了吧,俗话说得好,"求人不如求己".我不知道答案的原因是我的基础知识学得还很烂.
不过我会自己找出答案来的.学好基础就行,我相信.
----------------解决方案--------------------------------------------------------
  相关解决方案