Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

308
Vistas
En C, ¿cómo pasar un número variable de argumentos (por ejemplo, más de 50) a una función que va_start() entiende antes de llamar a vsnprintf()?

Pregunta

¿Hay alguna manera de pasar muchos argumentos a MyPrint() a continuación usando algún tipo de matriz que contenga una lista de punteros a cadenas que va_start() entiende antes de llamar a vsnprintf() ?

Ejemplo de un especificador de cadena de formato. Sería bueno crear una matriz de los valores correspondientes y pasarla a MyPrint() en lugar de pasar cada argumento individualmente. No sé si es posible que va_start() lo entienda. :(

 "[0x%llX][%u] %s --- A=%llu (0x%llX) B=%llu (0x%llX) C=%llu (0x%llX) X=%llu (0x%llX) Y=%llu (0x%llX) Z=%llu (0x%llX)"

Detalles

MyPrint() llama a vsnprintf(), que imprime una lista formateada de argumentos en una matriz de caracteres. La declaración de vsnprintf() se muestra a continuación:

 int vsnprintf(char *arr, size_t len, const wchar_t *format, va_list args);

Parámetros

  • arr: Puntero a la matriz de caracteres donde se imprimirá la salida
  • len: número máximo de caracteres que se pueden escribir en la matriz
  • formato: Formato en el que se imprimirá la salida
  • args: Puntero a la lista de argumentos a imprimir

Manifestación

 #include <stdio.h> #include <stdarg.h> int MyPrint(char* buffer, int bufferSize, const char *format, ...) { int len = 0; va_list arguments; va_start(arguments, format); len = vsnprintf(buffer, bufferSize, format, arguments); va_end(arguments); return len; } int main() { char buffer[256]; MyPrint(buffer, 256, "%s %s","Hello","World"); printf("%s",buffer); return 0; }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

¿Hay alguna manera de pasar muchos argumentos a MyPrint() a continuación usando algún tipo de matriz que contenga una lista de punteros a cadenas que va_start() entiende antes de llamar a vsnprintf() ?

Las únicas formas definidas de inicializar una va_list , como vsnprintf() requiere como parámetro, son

  • a través de la macro va_start() , que opera en el contexto de una función variable para formar una va_list a partir de los argumentos variables de la función, y

  • a través de la macro va_copy() , para hacer una copia de otra va_list .

No hay ningún mecanismo en C estándar para formar una va_list a partir de los elementos de una matriz, excepto pasándolos todos, individualmente , a una función variádica.

Las funciones variádicas tienen que ver con la flexibilidad de codificación, no con la flexibilidad de datos. Si desea una función que maneje matrices de datos, escriba una (no variádica) que lo haga.

Cada vez que consideres escribir tu propia función varargs, golpéate en la cabeza y repite el mantra: "varargs no es la respuesta". Solo si todavía tiene varargs en su cabeza después de algunas iteraciones, debería considerar investigar esa opción.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda