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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top