Предупреждения при использовании строк формата с помощью sprintf() в C ++
Вопрос
Компиляция этих строк
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 только один.Кто-нибудь может мне помочь?Спасибо.
Решение
В вашем формате отсутствует type, потому что l - это модификатор "sizeof".Должно быть %ld
Другие советы
boost::lexical_cast<string>(sz)
во всяком случае, это намного приятнее.
Смотрите этот список спецификаторы формата printf
Это комментарий для %l равен:
Аргумент интерпретируется как long int или unsigned long int для целого числа спецификаторы (i, d, o, u, x и X), и в виде широкого символа или wide character строка для спецификаторов c и s.
int sprintf ( char * str, формат const char *, ...);
Для этого не требуется длина "str" в качестве второго аргумента.Достаточно указать имя указателя на строку / имя массива.