문제
Sprintf () 시각적 C ++ 6.0 (일반 C)의 서명되지 않은 긴 값을 원합니다.
char buf[1000]; //bad coding
unsigned __int64 l = 12345678;
char t1[6] = "test1";
char t2[6] = "test2";
sprintf(buf, "%lli, %s, %s", l, t1, t2);
결과를 제공합니다
12345678, (null), test1
(보기 test2
인쇄되지 않음)
그리고 l = 123456789012345
예외 핸들을 제공합니다
제안이 있습니까?
해결책
인쇄하려면 unsigned __int64
Visual C ++ 6.0의 값을 사용해야합니다 %I64u
, 아니다 %lli
(인용하다 이 페이지 MSDN). %lli
Visual Studio 2005 이상 버전에서만 지원됩니다. 따라서 코드는 다음과 같습니다.
sprintf(buf, "%I64u, %s, %s", l, t1, t2);
다른 팁
Printf는 타원을 사용하여 변수 인수 목록을 전달합니다. 당신이 보는 (null)은 긴 길이의 두 번째 부분이며, 모두 0 비트입니다. 1 << 60+1 << 30으로 설정하면 1 << 60 부분이 숯으로 해석되므로 충돌이 발생합니다.
올바른 솔루션은 10 자리의 세 부분으로 숫자를 분류하는 것입니다.
분명히, 당신은 할당하지 않았습니다 additionaltext
필요한 것 char *
(끈). 주목하십시오 long int
가공되었고, 쉼표는 복사되었고 %s
생성 (null)
.
제휴하지 않습니다 StackOverflow