Avertissements utilisant des chaînes de format avec sprintf () en C ++
Question
Compiler ces lignes
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);
J'ai lu deux avertissements sur la ligne snprintf:
warning: conversion lacks type at end of format
warning: too many arguments for format
Pourquoi? Le type est spécifié (long int sz et% l dans snprintf) et l'argument dans snprintf est unique. Quelqu'un peut-il m'aider? Merci.
La solution
Votre format manque de type, car l est un & "; sizeof &"; modificateur. Devrait être% ld
Autres conseils
boost::lexical_cast<string>(sz)
est beaucoup plus agréable, de toute façon.
Consultez cette liste de spécificateurs de format printf
.Son commentaire sur% l est:
L'argument est interprété comme un long int ou unsigned long int pour entier spécificateurs (i, d, o, u, x et x), et en tant que caractère large ou caractère large chaîne pour les spécificateurs c et s.
int sprintf (char * str, format const char *, ...);
Il ne faut pas que la longueur de & "; str &"; soit le deuxième argument. Le nom du pointeur / nom du tableau est suffisant.