Pregunta

Compilando estas líneas

    long int sz;
    char tmpret[128];

    //take substring of c, translate in c string, convert to int, 
    //and multiply with 1024
    sz=atoi(c.substr(0,pos).c_str())*1024;

    snprintf(tmpret,128,"%l",sz); 

Leí dos advertencias en la línea snprintf:

 warning: conversion lacks type at end of format
 warning: too many arguments for format

¿Por qué? Se especifica el tipo (long int sz y% l en snprintf) y el argumento en snprintf es solo uno. Alguien puede ayudarme? Gracias.

¿Fue útil?

Solución

Su formato carece de tipo, porque l es un " sizeof " modificador Debería ser% ld

Otros consejos

boost::lexical_cast<string>(sz) es mucho mejor, de todos modos.

Consulte esta lista de especificadores de formato printf

Su comentario para% l es:

  

El argumento se interpreta como un largo   int o unsigned long int para entero   especificadores (i, d, o, u, x y X), y   como un personaje ancho o personaje ancho   cadena para especificadores c y s.

int sprintf (char * str, const char * format, ...);

No requiere la longitud de " str " ;, como segundo argumento.  El nombre del puntero de cadena / nombre de matriz es suficiente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top