在C中使用va_arg()时如何避免运行时错误

时间:2014-03-01 07:41:31

标签: c runtime printf variadic-functions

我正在尝试制作一些与printf类似的效果。

在我完成这些功能之前,我正在学习va_listva_startva_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编程。

1 个答案:

答案 0 :(得分:4)

你做不到。因为像success()这样的变量参数函数不知道它接收的参数类型,甚至不知道有多少参数。

您可以做的最好的事情是在format参数中使用某个格式说明符来提供诸如变量参数的数量和/或它们的类型等信息。并希望在调用此函数时,调用者将遵循此法则。这就是printf()家庭功能的作用。

参考:How can I discover how many arguments a function was actually called with?