程序:
#ifndef PRINTF_H
#define PRINTF_H
#include "my_put_char.h"
int my_printf(char *str, ...);
#endif
这是我的函数头文件。
#include <stdio.h>
#include "my_put_char.h"
void my_put_char(char c)
{
fwrite(&c, sizeof(char), 1, stdout);
}
这是我的putchar实现(my_put_char.c)。
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include "printf.h"
int my_printf(char *str, ...)
{
if(str == NULL)
return 0;
int i;
char a;
va_list print;
va_start(print,str);
for(i = 0; str[i] ; i++)
{
if(str[i] == '%')
{
i++;
switch(str[i])
{
case 'c':
a = va_arg(print, char);
my_put_char(a);
break;
}
}
}
va_end(print);
return 0;
}
最后,这是我printf实现的一部分。我正在使用
%c
测试以显示字符。当我从
main.c
执行my_print("%c", 'd');
时,它编译并显示d
。但是当我执行
my_print("%c", "hi");
时,它仍然编译并显示数字。问题:
在(或之前)编写
a = va_arg(print, char);
之后,是否有一种方法可以检查我的输入是否为不同的数据类型?
如果我的输入是不同的数据类型,我正在尝试显示一个错误。我已经研究了2天,并找不到任何答案。 非常感谢你的时间!
__attribute__((format(printf,1,2))
注释来检查类似于printf()
的函数,这并非没有原因 — 如果不使用该注释很难实现。 - Jonathan Leffler