Я хочу 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 дает дескриптор исключения
какие-либо предложения?
@Lytha Alexander, вам следует отредактировать свой вопрос и добавить его к вопросу, а не добавлять его в комментарий.





Видимо, вы не назначили additionaltext нужному char * (строка). Обратите внимание, что long int был обработан, запятая была скопирована, и только %s сгенерировал (null).
printf использует многоточие для передачи списка переменных аргументов. (Null), который вы видите, - это вторая часть вашего long long, которая состоит из 0 бит. Установите его на 1 << 60 + 1 << 30, и вы получите сбой, поскольку часть 1 << 60 интерпретируется как char *.
Правильным решением было бы разбить число на три части по 10 цифр: "verylongvalue% 10000000000" "(verylongvalue / 10000000000)% 10000000000" "verylongvalue / 100000000000000000000".
Чтобы напечатать значение unsigned __int64 в Visual C++ 6.0, вы должны использовать %I64u, а не %lli (см. эта страница в MSDN). %lli поддерживается только в Visual Studio 2005 и более поздних версиях.
Итак, ваш код должен быть:
sprintf(buf, "%I64u, %s, %s", l, t1, t2);
извините, я был ungenau. char buf [1000]; // неправильная кодировка unsigned __int64 l = 12345678; char t [5] = "тест"; sprintf (buf, "% lli,% s", l, t); дает результат 12345678. (null) и l = 123456789012345 дает дескриптор исключения