Avvisi che utilizzano stringhe di formato con sprintf () in C ++
Domanda
Compilazione di queste righe
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);
Ho letto due avvertimenti sulla riga snprintf:
warning: conversion lacks type at end of format
warning: too many arguments for format
Perché? Il tipo è specificato (long int sz e% l in snprintf) e l'argomento in snprintf è solo uno. Qualcuno può aiutarmi? Grazie.
Soluzione
Il tuo formato non ha tipo, perché l è un " sizeof " modificatore. Dovrebbe essere% ld
Altri suggerimenti
boost::lexical_cast<string>(sz)
è comunque molto più bello.
Vedi questo elenco di specificatori del formato printf
È commento per% l è:
L'argomento è interpretato come lungo int o unsigned long int per intero specificatori (i, d, o, u, x e X) e come personaggio largo o personaggio largo stringa per gli identificatori c e s.
int sprintf (char * str, const char * format, ...);
Non richiede la lunghezza di " str " ;, come secondo argomento. Il nome del puntatore della stringa / nome dell'array è sufficiente.