2008-12-03 123 views
2

編譯此行警告()在C++

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線使用的格式字符串與sprintf的:

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

爲什麼?指定了類型(snprintf中的long int sz和%l),並且snprintf中的參數只有一個。有誰能夠幫助我?謝謝。

回答

8

您的格式缺少類型,因爲l是「sizeof」修飾符。應該%LD

+0

沒錯!非常感謝:D – Emilio 2008-12-03 19:33:18

0

printf format specifiers

此列表它的%L的評論是:

的參數被解釋爲一個長 int或unsigned long int類型整數 符(我, d,o,u,x和X)以及作爲寬字符或寬字符的 指定符c和s的字符串。

1

boost::lexical_cast<string>(sz)好多了,無論如何。

-1

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

它不需要「str」的長度作爲第二個參數。 字符串指針/數組名稱的名稱就足夠了。

+0

sprintf()是相當不安全的,因爲它沒有被檢查。如果可用,最好使用替代方法來避免緩衝區溢出。 – Gorpik 2009-01-27 07:23:17