您好,匿名用户
随意问技术百科期待您的加入

C语言中printf实现的猜测

0 投票

在如下代码中:

#include<stdio.h>
main(int argc , char const* argv){
    char *ch = "HelloWorld";
    printf("%s\n",ch);
    printf("%s\n",ch+1);    
}

运行结果为:

HelloWorld
elloWorld

因此我推断:printf()在打印字符串时,当传入参数:指向字符串某个字符的地址时,该函数将一直打印后续的字符串,直到'\0'字符串的出现为止。
不知道我得判断是否正确,我在Ubuntu下查到的/usr/include/stdio.h 的源码,但是只是看到了

extern int printf(char * , char *,....);

不知道具体在哪里实现的,求解,求指导。

用户头像 提问 2012年 12月1日 @ Hecarim 上等兵 (361 威望)
分享到:

1个回答

0 投票
 
最佳答案

你猜测的是对的,但我只能说你这是在舍本逐末。楼上所谓的“研究得很深”和研究汇编更是搞笑,不要误导别人了。

你应该好好查看手册,你所猜测的在手册里说明得很详细。在手册中也会告诉你它的实现在什么地方。

printf的实现在clib里,比如linux下一般就是glibc。

如果想学习printf的实现,可以去下一份glibc的源码查看一下,一般系统中是不会带c库的源码的,glibc的地址是:http://www.gnu.org/software/libc/

printf是在stdio.h中定义的,所以你直接在glibc源码中的stdio相关目录下去查看,在glibc2.16中是stdio-common目录。

再补充一点,你的系统有可能没有装man pages,你可以通过下面的命令:

man 3 printf

如果没有结果,那你就得先装man pages,当然,也可以去
http://www.kernel.org/doc/man-pages/

查看. 或者直接去这下载:

http://tldp.org/manpages/man.php

用户头像 回复 2012年 12月1日 @ Annie 上等兵 (299 威望)
选中 2012年 12月1日 @Hecarim
提一个问题:

相关问题

0 投票
1 回复 42 阅读
用户头像 提问 2012年 12月1日 @ Urgot 上等兵 (262 威望)
0 投票
1 回复 44 阅读
用户头像 提问 2012年 12月1日 @ Udyr 上等兵 (341 威望)
0 投票
1 回复 23 阅读
用户头像 提问 2014年 2月15日 @ Thresh 上等兵 (138 威望)
0 投票
1 回复 46 阅读
用户头像 提问 2012年 12月1日 @ Kyrie 上等兵 (240 威望)
0 投票
1 回复 34 阅读
用户头像 提问 2012年 12月1日 @ Aries 上等兵 (238 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...