带有unsigned long long和sprintf的Visual C ++ 6.0

时间:2008-10-14 10:36:26

标签: c vc6

我想在Visual C ++ 6.0(普通C)中sprintf()一个unsigned long long值。

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它提供了一个异常句柄

有什么建议吗?

3 个答案:

答案 0 :(得分:9)

要在Visual C ++ 6.0中打印unsigned __int64值,您应该使用%I64u,而不是%lli(请参阅MSDN上的this page)。 %lli仅在Visual Studio 2005及更高版本中受支持。 所以,你的代码应该是:

sprintf(buf, "%I64u, %s, %s", l, t1, t2);

答案 1 :(得分:1)

printf使用省略号传递变量参数列表。你看到的(null)是long long的第二部分,恰好是0位。将其设置为1<<< 60<<<<<<<<<<<<<<<<<<<<<<<<<<

正确的解决办法是将数字分成10位数的三个部分,“非常长值%10000000000”“(非常长值/ 10000000000)%10000000000”“非常长值/ 100000000000000000000”。

答案 2 :(得分:-1)

显然,您没有将additionaltext分配给必要的char *(字符串)。请注意,long int已处理,逗号已被复制,只有%s生成(null)