加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

stdio文件描述符(stdin,stdout,stderr)是否只能从#include中打开

发布时间:2020-12-13 23:54:47 所属栏目:Linux 来源:网络整理
导读:在将整数转换为C中的字符串时,我对包含stdio.h感到有些恼火 – 不会用不必要的文件描述符和其他代码来破坏二进制文件吗?或者只有在代码中使用标准的io文件描述符stdout,stdin或stderr时才打开流,例如printf,scanf,fprintf?如果我的代码只使用snprintf(3),
在将整数转换为C中的字符串时,我对包含stdio.h感到有些恼火 – 不会用不必要的文件描述符和其他代码来破坏二进制文件吗?或者只有在代码中使用标准的io文件描述符stdout,stdin或stderr时才打开流,例如printf,scanf,fprintf?如果我的代码只使用snprintf(3),它可能仍然可以吗?

我最接近的现成解决方案是将整数转换为strfromd(3)的双精度浮点,格式字符串不打印小数点.

bhuwansahni在How to convert integer to string in C?年给出了一个很好的自己动手解决方案

我没有看到如何使用(链接不起作用)itoa,_itoa或_fitoa_word,尽管_fitoa_word确实显示为nm /lib64/libc6.so.6的函数.

解决方法

即使您不包含stdio.h,它们也会打开.它们是程序的标准流,并在运行时打开.

程序在实际执行之前需要进行一些初始化.这包括加载符号表,分配内存,初始化静态数据和链接动态库等.此时打开标准流.然后控件转到程序中的main()函数并开始执行.

对于第二个问题,标准IO不会使程序膨胀,因为您的程序几乎总是与标准C库libc链接,并且通常是动态链接的(因此它不会增加可执行文件的大小).

是的,如果你不使用它们就没问题.只使用像snprintf()这样的东西,你可以做得很好,但仍然会打开标准流.使用它们与否并不重要.

谢谢Paul Ogilvie

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读