c/c++语言开发共享带有unsigned long long和sprintf的VisualC ++ 6.0

我想在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它给出了一个exception句柄

有什么建议?

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

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

    printf使用省略号传递变量参数列表。 你看到的(null)是long long的第二部分,恰好是0位。 将它设置为1 << 60 + 1 << 30,你会得到一个崩溃,因为1 << 60部分被解释为char *。

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

    显然,您没有为必要的char * (字符串)分配additionaltextchar * 。 请注意,处理了long int ,复制了逗号并且只生成了%s (null)

    需要了解更多c/c++开发分享带有unsigned long long和sprintf的VisualC ++ 6.0,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享带有unsigned long long和sprintf的VisualC ++ 6.0相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979317.html

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐