专栏首页C语言入门到精通基础知识 | 每日一练(135)

基础知识 | 每日一练(135)

基础知识练习

士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ——菜根谭

读者:怎样写类似 printf() 的函数, 再把参数转传给 printf() 去完成大部分工作?

小林:用 vprintf(), vfprintf() 或 vsprintf()。下面是一个 error() 函数, 它列印一个出错信息, 在信息前加入字符串 “error: ”和在信息后加入换行符:

#include <stdio.h>

#include <stdarg.h>

void error(const char *fmt, ...)

{

va_list argp;

fprintf(stderr, "error: ");

va_start(argp, fmt);

vfprintf(stderr, fmt, argp);

va_end(argp);

fprintf(stderr, "\n");

}

读者:怎样知道实际上有多少个参数传入函数?

小林:这一段信息不可移植。一些旧系统提供一个非标准函数 nargs()。然而它的可信度值得怀疑, 因为它的典型返回值是参数的字节长度, 而不是参数的个数。结构、整数和浮点类型的值一般需要几个字节的长度。

任何接收可变参数的函数都应该可以从传入的参数本身来得到参数的数目。类 printf 函数从格式字符串中的格式说明符来确定参数个数, 就象 %d 这样的格式说明符。所以如果格式字符串和参数数目不符时, 此类函数会出错的很厉害。

本文分享自微信公众号 - C语言(ycl_printf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据结构 | 每日一练(98)

    ——老子

    闫小林
  • 当年上市36个涨停板,市值过400亿的暴风影音,CEO被抓了。。。

    不过没多久,到 2004 年他就被周鸿祎挖到了雅虎中国,当起了软件事业部总经理。

    闫小林
  • 基础知识 | 每日一练(48)

    士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ...

    闫小林
  • python 实现端口连通性检测

    在zabbix 中 加入对表中数据的监控。在zabbix 的mysql 模板中加入Balant 的监控项,也可以加入图像,我们最后的结果是要展示在grafana...

    用户2398817
  • ROM

    module rom(addr,data); input[3:0] addr; output[7:0] data; function[7:0] romout; ...

    anytao
  • 抛出和接收异常的顺序

    异常(exception)是C++语言引入的错误处理机制。它 采用了统一的方式对程序的运行时错误进行处理,具有标准化、安全和高效的特点。C++为了实现异常处理,...

    Dabelv
  • C++抛出和接收异常的顺序

    异常(exception)是C++语言引入的错误处理机制。它 采用了统一的方式对程序的运行时错误进行处理,具有标准化、安全和高效的特点。C++为了实现异常处理,...

    Dabelv
  • 手把手搭建WebSocket多人在线聊天室

    https://www.callicoder.com/spring-boot-websocket-chat-example/

    Java3y
  • Sklearn包含的常用算法

    参考资料来自sklearn官方网站:http://scikit-learn.org/stable/

    统计学家
  • VisualStudio 给项目添加特殊的 Nuget 的链接

    有一些项目需要使用一些特殊的 Nuget 才可以下载,但是不能在开源的项目需要小伙伴下载仓库在自己的 VisualStudio 修改自己的 Nuget 链接才能...

    林德熙

扫码关注云+社区

领取腾讯云代金券