C、C格式化字符串究竟有何独特之处?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2940个文字,预计阅读时间需要12分钟。
在C和C++开发中,我们常用printf函数进行字符串的格式化输出,例如printf(format string +%d, %d, 1, 2);,这样的格式化主要用于打印调试信息。printf函数实现的实际上是接收可变参数,然后解析这些参数。
引言
在C和C++开发中,我们经常会用到printf来进行字符串的格式化,例如printf("format string %d, %d", 1, 2);,这样的格式化只是用于打印调试信息。printf函数实现的是接收可变参数,然后解析格式化的字符串,最后输出到控制台。那么问题来了,当我们需要实现一个函数,根据传入的可变参数来生成格式化的字符串,应该怎么办呢?
你可以在这里看到更好的排版
正文
可变参数
首先来一个可变参数使用示例,testVariadic方法接收int行的可变参数,并以可变参数为-1表示结束。va_list用于遍历可变参数,va_start方法接收两个参数,第一个为va_list,第二个为可变参数前一个参数,下面的例子里该参数为a。
/** 下面是 <stdarg.h> 里面重要的几个宏定义如下: typedef char* va_list; void va_start ( va_list ap, prev_param ); // ANSI version type va_arg ( va_list ap, type ); void va_end ( va_list ap ); va_list 是一个字符指针,可以理解为指向当前参数的一个指针,取参必须通过这个指针进行。
本文共计2940个文字,预计阅读时间需要12分钟。
在C和C++开发中,我们常用printf函数进行字符串的格式化输出,例如printf(format string +%d, %d, 1, 2);,这样的格式化主要用于打印调试信息。printf函数实现的实际上是接收可变参数,然后解析这些参数。
引言
在C和C++开发中,我们经常会用到printf来进行字符串的格式化,例如printf("format string %d, %d", 1, 2);,这样的格式化只是用于打印调试信息。printf函数实现的是接收可变参数,然后解析格式化的字符串,最后输出到控制台。那么问题来了,当我们需要实现一个函数,根据传入的可变参数来生成格式化的字符串,应该怎么办呢?
你可以在这里看到更好的排版
正文
可变参数
首先来一个可变参数使用示例,testVariadic方法接收int行的可变参数,并以可变参数为-1表示结束。va_list用于遍历可变参数,va_start方法接收两个参数,第一个为va_list,第二个为可变参数前一个参数,下面的例子里该参数为a。
/** 下面是 <stdarg.h> 里面重要的几个宏定义如下: typedef char* va_list; void va_start ( va_list ap, prev_param ); // ANSI version type va_arg ( va_list ap, type ); void va_end ( va_list ap ); va_list 是一个字符指针,可以理解为指向当前参数的一个指针,取参必须通过这个指针进行。

