Question

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.

Was it helpful?

Solution

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

OTHER TIPS

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

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.

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top