Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

304
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!