문제

이 라인을 컴파일합니다

    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"의 길이가 필요하지 않습니다. 문자열 포인터/ 배열 이름이 충분합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top