c ++에서 sprintf ()를 사용하여 형식 문자열을 사용한 경고
문제
이 라인을 컴파일합니다
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의 인수는 단 하나 일뿐입니다. 아무도 나를 도울 수 있습니까? 감사.
해결책
L은 "크기"수정 자이므로 형식에는 유형이 부족합니다. %ld 여야합니다
다른 팁
boost::lexical_cast<string>(sz)
어쨌든 훨씬 더 좋습니다.
이 목록을 참조하십시오 printf 형식 지정자
%l에 대한 의견은 다음과 같습니다.
인수는 정수 지정자 (i, d, o, u, x 및 x)에 대한 긴 int 또는 서명되지 않은 긴 int로 해석되고 지정자 C 및 S의 넓은 문자 또는 넓은 문자열로 해석됩니다.
int sprintf (char * str, const char * 형식, ...);
두 번째 인수로서 "str"의 길이가 필요하지 않습니다. 문자열 포인터/ 배열 이름이 충분합니다.
제휴하지 않습니다 StackOverflow