문제

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).

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