我需要从va_arg获取一个char。 我使用整数,但我的问题不起作用!
char c = (char)va_arg(ap, int);
write(1, &c, 1);
它给了其他东西的ascii代码。
答案 0 :(得分:3)
可变函数的参数(与声明中的...
对应的参数)经历默认参数提升。
比int
更窄的整数参数被提升为int
(如果类型为无符号且其最大值超过unsigned int
,则提升为INT_MAX
),类型为float
的参数{1}}被提升为double
。
因此无法从char
获得va_arg()
。显而易见的
char c = va_arg(ap, char); // DON'T DO THIS
有未定义的行为。
你在做什么:
char c = (char)va_arg(ap, int);
看起来是正确的,但(char)
演员阵容是不必要的;无论如何,int
结果将隐式转换为char
。
例如,该程序的输出为c = 'x'
:
#include <stdio.h>
#include <stdarg.h>
void func(int first, ...) {
va_list ap;
va_start(ap, first);
char c = va_arg(ap, int);
va_end(ap);
printf("c = '%c'\n", c);
}
int main(void) {
func(42, 'x');
}
您需要更新问题以描述实际问题。你说“它给了其他东西的ascii代码”;我不知道这意味着什么。