Вопрос

Я хочу sprintf() беззнаковое длинное значение в Visual 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 использует многоточие для передачи списка переменных аргументов.(Нулевой), который вы видите, — это вторая часть вашего длинного длинного значения, все из которого состоят из 0 бит.Установите значение 1<<60+1<<30, и вы получите сбой, поскольку часть 1<<60 интерпретируется как символ*.

Правильным решением было бы разбить число на три части по 10 цифр: "verylongvalue % 10000000000" "(verylongvalue/10000000000) % 10000000000" "verylongvalue/100000000000000000000".

Судя по всему, вы не назначили additionaltext к необходимому char * (нить).Обратите внимание, что long int было обработано, запятая была скопирована и только %s созданный (null).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top