我正在尝试制作一些与printf
类似的效果。
在我完成这些功能之前,我正在学习va_list
,va_start
,va_arg
......
我做了一个简单的代码:
int main()
{
success("Hello", 356);
}
void success(char* format, ...)
{
va_list list;
char *String;
va_start(list,format);
String = va_arg(list,char*);
printf("%s",String);
va_end(list);
getchar();
}
此代码 会因运行时错误而失败(在期望获取字符串时发送整数)。
我正在尝试避免运行时错误,我想在va_arg
失败时打印一些错误消息并退出程序,但我不知道如何检查va_arg
是否失败。
我搜索了一个解决方案,但我找不到任何解决方案。 我不能使用try-> catch因为我在C编程。
答案 0 :(得分:4)
你做不到。因为像success()
这样的变量参数函数不知道它接收的参数类型,甚至不知道有多少参数。
您可以做的最好的事情是在format
参数中使用某个格式说明符来提供诸如变量参数的数量和/或它们的类型等信息。并希望在调用此函数时,调用者将遵循此法则。这就是printf()
家庭功能的作用。
参考:How can I discover how many arguments a function was actually called with?