Pergunta

Compilar este linhas

    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); 

Eu li dois de advertência na linha snprintf:

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

Por quê? O tipo é especificado (int longo sz, e l% em snprintf) e o argumento em snprintf é apenas um. Alguém pode me ajudar? Obrigado.

Foi útil?

Solução

Seu formato carece tipo, porque l é um modificador "sizeof". Deve ser% ld

Outras dicas

boost::lexical_cast<string>(sz) é muito mais agradável, de qualquer maneira.

Veja esta lista de printf formato especificadores

É do comentário a% l é:

O argumento é interpretado como um longo int ou longa unsigned int para inteiro especificadores (i, d, o, u, X e X), e como um caractere largo ou caracteres largos string para especificadores c e s.

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

Ele não exige que o comprimento de "str", como o segundo argumento. O nome do nome do ponteiro de string / array é suficiente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top