当前位置: 首页 > 知识库问答 >
问题:

printf("%llx")有什么问题?

李森
2023-03-14

我的这段代码挑战了我所有的c语言知识。

int main(void){
    unsigned long long int massage ;

    scanf("%llX", &massage); //input: 0x1234567890abcdef
    printf("%llX", massage);
    return 0;
}

在我的“64位 - Corei5 - Fedora - GCC”上,它打印出我喂养它的东西。但是在我朋友的系统上(32位,MS XP,最小值),它打印90ABCDEF。我不明白为什么。有人知道吗?

顺便说一句:他的系统上的sizeof(unsigned long long int)是8。

共有2个答案

宋朝
2023-03-14

Windows C 库使用“%I64d”而不是“%lld”来打印“长长”类型的参数。

参考:http://gcc.gnu.org/ml/gcc-patches/2004-11/msg01966.html

梁渊
2023-03-14

问题是编译器所相信的(如sizeof所反映的:sizeof(无符号long long int)在编译时被评估)和运行时库所相信的(如printf所反映的:printf函数在运行时被调用,因此它的格式说明符在运行时生效)之间的差异。

根据MinGW文件中的“C99 ”:

GCC 不包含 C 运行时库。这由平台提供。GCC 的 MinGW 端口使用微软的原始(旧)视觉 C 运行时 MSVCRT,这是微软视觉工作室 6(1998 年发布)的目标。

[…]

因为MinGW依赖于MSVCRT,所以它与Visual Studio 6在兼容性方面有许多相同的限制和怪癖。您应该假设MinGW应用程序不能依赖C99行为,而只能依赖C89。例如,虽然%ll有一个变通方法,但不支持printf中较新的格式字符,如%a和%ll。

(它提到的解决方法是使用I64而不是ll:so, 。令人恼火的是,至少在我的系统上,GCC在看到文本格式字符串时会发出警告,因为它认为它会有更好的运行时库。)

 类似资料:
  • 和之间的区别是什么

  • 问题内容: 关于python 3.0中reduce()函数的更改以及如何删除它,网上似乎有很多热烈的讨论。我有点难以理解为什么会这样。我发现在各种情况下使用它是很合理的。如果蔑视仅仅是主观的,我无法想象会有这么多人关心它。 我想念什么?reduce()有什么问题? 问题答案: 正如Guido在Python 3000 帖子中的reduce()的命运中所说: 所以现在reduce()。实际上,这是我一

  • 问题内容: 最近,我在一些最差的PHP实践中阅读了此线程。在第二个答案中,有一个关于的使用的简短讨论,我只是想知道所有有关的内容。 我个人使用它来切分给定的数组,例如或稍后在其中清理变量,因为它们已为我方便地命名。 这是不好的做法吗?这有什么风险?您对的使用有何看法? 问题答案: 我发现这只是一种不好的做法,因为它会导致许多变数,将来的维护者(或您自己在几周内)都不知道它们的来源。考虑这种情况:

  • 问题内容: 我简直不敢相信我网站上正在发生的事情。当我添加此行时: 一切正常。如果我不这样做,CSS就会“混乱”,一切都会变得不同,布局也会变得“丑陋”。 这条线如何解决所有问题? 问题答案: 您正在将HTML与XHTML混合使用。 通常,声明用于区分HTMLish语言的版本(在这种情况下为HTML或XHTML)。 不同的标记语言将表现不同。我最喜欢的例子是。在浏览器中查看以下内容: XHTML

  • 问题内容: 该代码在第一个“等级”之后保持两次打印。有谁知道为什么要打印两次?我做错了“ For Loop”吗? 问题答案: 这是“两次打印”,因为当您按回车键输入一个字符时,实际上是在写两个字符:您键入的字符和(换行符)。 添加第二个调用以读取换行符: 同样,不需要初始化为in 也可以。实际上,在此循环中使用a没有意义,首选使用a 。

  • 问题内容: 我正在尝试使用openFileOutput函数,但它无法编译且无法识别该函数。我正在使用android sdk 1.6。这是SDK问题吗?这是参数问题吗? 问题答案: 您的方法应如下。将额外的上下文作为参数。对于这种方法,您可以通过您的服务或活动