2

编译这一行

    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,和 snprintf 中的 %l),并且 snprintf 中的参数只有一个。有谁能够帮助我?谢谢。

4

4 回答 4

8

您的格式缺少类型,因为 l 是“sizeof”修饰符。应该是 %ld

于 2008-12-03T19:23:07.507 回答
1

boost::lexical_cast<string>(sz)无论如何,要好得多。

于 2008-12-03T19:32:21.463 回答
0

请参阅此printf 格式说明符列表

%l 的评论是:

该参数被解释为整数说明符(i、d、o、u、x 和 X)的 long int 或 unsigned long int,以及说明符 c 和 s 的宽字符或宽字符串。

于 2008-12-03T19:31:38.267 回答
-1

int sprintf ( char * str, const char * 格式, ... );

它不需要“str”的长度作为第二个参数。字符串指针/数组名称的名称就足够了。

于 2009-01-27T07:04:22.777 回答