【发布时间】:2013-03-03 10:37:36
【问题描述】:
我正在尝试创建 printf() 的简化版本,但不使用 va_list、va_start、va_arg 和 va_end。
我最初的想法是:
void my_printf (char *format, ...);
然后,检查格式,并计算 %(参数)的数量,以找出传递给我的函数的变量的数量。从那里开始,我正在考虑根据参数的数量创建一个缓冲区,然后组合并使用 write() 最终输出它们。
有没有更好的方法来解决这个问题?我的计划会遇到问题吗?
任何帮助将不胜感激。
我的一些头脑风暴代码是:
// Count arguments
int cnt_s, cnt_c, cnt_d, cnt_u, cnt_x;
for (; *format; format++) {
switch(format[0]) {
case '%':
switch(format[1]) {
case 'd':
cnt_d++;
}
}
}
【问题讨论】:
-
你需要
va_list、va_start、va_arg和va_end来访问...指定的参数 -
我正在考虑直接从内存中访问它们。那么除了
...,我还能用什么? -
这是一个非常糟糕的主意。 为什么您试图规避为访问可变长度参数数组提供的标准方法?
-
它不适用于任何实际应用。
标签: c