【问题标题】:Variadic function process arguments in reverse order. why? [duplicate]可变参数函数以相反的顺序处理参数。为什么? [复制]
【发布时间】:2020-04-23 02:28:40
【问题描述】:

我已经编写了一个小代码来处理可变数量的字符串,但是我如何以相反的顺序处理这些字符串。 预期输出为:Jolasd14;实际输出为:asdJol14。

int Columna(int anchoColumna,...){
    va_list longitudCadena;
    va_start ( longitudCadena, anchoColumna );
    char caracter;
    do{
        caracter =va_arg ( longitudCadena, int );
        anchoColumna -= ( int ) caracter;
    } while ( caracter != '\0' );
    va_end ( longitudCadena );
    return anchoColumna;
}
int main ( int cantidadArgumentos, char** argumentos ) {
    printf("%d",Columna(20,printf("Jol"),printf("asd")));
    return 0;
}


编辑: 我只用字符串尝试了类似的事情,得到了预期的输出。

【问题讨论】:

  • 你问题的前提是错误的。这是任何可以执行此操作的函数调用,因为在 C 中未指定函数参数评估的顺序。

标签: c printf variadic


【解决方案1】:

printf("Jol")printf("asd")的执行顺序没有指定。它们都发生在Columna() 执行之前。

Columna() 调用之前,只需按照您想要的顺序执行它们,并传入它们各自的返回值。

int a = printf("Jol");
int b = printf("asd");
printf("%d",Columna(20,a,b);

【讨论】:

  • 感谢您的回复,但是我尝试了仅使用字符串的类似方法,并且得到了预期的输出
猜你喜欢
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 2019-04-18
  • 2016-10-04
  • 2018-10-02
  • 2011-01-26
相关资源
最近更新 更多