Предупреждения при использовании строк формата с помощью sprintf() в C ++

StackOverflow https://stackoverflow.com/questions/338400

  •  19-08-2019
  •  | 
  •  

Вопрос

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

    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" в качестве второго аргумента.Достаточно указать имя указателя на строку / имя массива.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top