rsk*_*k82 3 c c++ printf gcc variadic-functions
在此示例中,此代码虽然编译它但不会产生正确的结果:
void encapsulatePrintf(const char *str, ...) {
va_list argptr;
va_start(argptr, str);
printf(str, argptr);
va_end(argptr);
}
Run Code Online (Sandbox Code Playgroud)
然后在主要: encapsulatePrintf("test str: %i - %s", 22, "test2");
test str: 2293428 - á "但是当我将功能从更改printf为vfprintf(stdout, str, argptr);
这里发生了什么 ?
printf()不采用va_list参数而是参数的变量列表,而vprintf()采用va_listas参数而不是变量参数列表.基本上,当你打电话printf()使用时
printf(str, argptr);
Run Code Online (Sandbox Code Playgroud)
你调用了未定义的行为:第一个参数承诺你会传递一个int和一个char*但是你传递了一个,而不是一个va_list.传递给的参数类型printf()必须与格式字符串中的规范匹配.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |