Advertencias usando cadenas de formato con sprintf () en C ++
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.
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.