Emilio
Emilio

Reputation: 4031

Warnings using format strings with sprintf() in C++

Compiling this lines

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

I read two warning on snprintf line:

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

Why? The type is specified (long int sz, and %l in snprintf) and the argument in snprintf is only one. Can anybody help me? Thanks.

Upvotes: 2

Views: 12348

Answers (4)

DILIP
DILIP

Reputation:

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

It does not require the length of "str", as the second argument. The name of the string pointer/ array name is enough.

Upvotes: -1

Matt Cruikshank
Matt Cruikshank

Reputation: 2968

boost::lexical_cast<string>(sz) is much nicer, anyway.

Upvotes: 1

Rob Walker
Rob Walker

Reputation: 47462

See this list of printf format specifiers

It's comment for %l is:

The argument is interpreted as a long int or unsigned long int for integer specifiers (i, d, o, u, x and X), and as a wide character or wide character string for specifiers c and s.

Upvotes: 0

Dmitry Khalatov
Dmitry Khalatov

Reputation: 4369

Your format lacks type, because l is a "sizeof" modifier. Should be %ld

Upvotes: 8

Related Questions