使用va_arg转换char

时间:2015-02-03 20:39:31

标签: c

我需要从va_arg获取一个char。 我使用整数,但我的问题不起作用!

char c = (char)va_arg(ap, int);
write(1, &c, 1);

它给了其他东西的ascii代码。

1 个答案:

答案 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代码”;我不知道这意味着什么。