Предупреждения с использованием форматных строк с помощью sprintf () в C ++ - PullRequest
2 голосов
/ 03 декабря 2008

Компиляция этих строк

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

Я прочитал два предупреждения в строке snprintf:

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

Почему? Указан тип (long int sz и% l в snprintf), а аргумент в snprintf только один. Кто-нибудь может мне помочь? Спасибо.

Ответы [ 4 ]

8 голосов
/ 03 декабря 2008

В вашем формате отсутствует тип, потому что l является модификатором "sizeof". Должно быть% ld

1 голос
/ 03 декабря 2008

boost::lexical_cast<string>(sz) намного лучше, в любом случае.

0 голосов
/ 27 января 2009

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

Это не требует длины "str", как второй аргумент. Достаточно имени указателя строки / имени массива.

0 голосов
/ 03 декабря 2008

См. Этот список спецификаторов формата printf

Это комментарий для% l:

Аргумент интерпретируется как длинный int или unsigned long int для целого числа спецификаторы (i, d, o, u, x и X) и как широкий символ или широкий символ строка для спецификаторов c и s.

...