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 行で 2 つの警告を読みました。

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

なんで?型が指定され (long int sz、snprintf では %l)、snprintf の引数は 1 つだけです。誰でも私を助けることができますか?ありがとう。

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 * format, ... );

2 番目の引数として、"str" の長さは必要ありません。文字列ポインタの名前/配列名で十分です。

于 2009-01-27T07:04:22.777 に答える