- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试打印 time_t 而不是在 Microsoft Visual Studio Project 中将其转换为 long int 并且它给了我意想不到的结果。源代码是
#include <time.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/timeb.h>
#include <string.h>
int main()
{
int a=1,b=2;
long int c=3;
time_t myTime;
time(&myTime);
printf("%d_%ld_%d_%ld",a,myTime,b,c);
printf("\n");
getchar();
return 0;
}
输出为 1_1389610399_0_2
。不过,这在我的 Linux 机器上运行良好。我知道 time_t 不应该像这样打印,但我不确定为什么?请告诉我如何调试此类问题?
编辑:鉴于 time_t
在 C 中被视为算术这一事实,我期望输出为 1_1389610399_2_3
。
最佳答案
I was expecting the output to be
1_1389610399_2_3
你的期望是错误的。不同的类型有不同的大小,当您通过可变参数传递“错误”类型时,这意味着接收者无法再在堆栈中的预期位置找到所有内容。这就是当格式代码与参数不匹配时行为未定义的原因:接收方读取的类型与调用方写入的类型不同。
0
你看到打印在你期望的地方 b
, 是 64 位 long long
的最高 32 位传递 time_t
时放置在堆栈上的值通过可变参数(在此实现中)。 %ld
格式化代码只占用了 myTime
值的前 4 个字节, 剩下的留给下一个格式化代码。
当它在 linux 上工作时,那是因为 time_t
是long
在该实现上,因此您的格式代码与您传递的类型相匹配。
有一种“通用”的方法可以打印任何有符号整数,即将其转换为intmax_t
。并使用格式化代码 %j
.不幸的是,你不能保证 time_t
是有符号类型,甚至是整数类型。所以这将更可移植,但仍然不是严格意义上的,因为 myTime
的值理论上可能不在intmax_t
的范围内根本。在 C++ 中你应该使用 std::cout << myTime;
,因为这样可以避免您需要知道 time_t
别名的实际类型(只要它不是任何类型的 char
即可)。
或者您可以使用 difftime
强制你的时间double
,您知道如何打印。或者你可以使用 gmtime
或 localtime
获得 segmentation 的日历时间,您知道如何使用 printf
打印其中的每个部分或 strftime
.
关于c++ - 在不强制转换的情况下打印 time_t 为 long int 会产生意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21089573/
我一直很难编辑我的 .htaccess 文件来一起做这三件事。我已经能够分别获得每个部分,但我只是不明白逻辑流程如何使它们全部工作。 这是我能够使用 bluehost support 上的演示进行整合
我制作的宏将模板工作簿保存为两个单独的文件。每个测试保存一个(位置 1、2、3 或 4),然后在另一个宏中使用每个测试的数据。第二个是保留用于备份的原始数据文件。现在的问题是每次我在每个位置运行测试并
我正在写一篇关于如何使用 OCaml 的模块系统而不是 Java 的 OO 系统(一个有趣的视角)的博客文章。我遇到了一些我不理解的关于强制的事情。下面是一个基本模块和两个包含它的模块: module
我有一段将被执行多次(5,000+)的代码,以及一个仅在第一次为真的 if 语句。我曾想过使用“FIRST”变量并每次都进行比较,但每次都检查它似乎是一种浪费,即使我知道它不需要。 bool FIRS
首先,我是 Perforce 的新手,我主要通过其文档进行学习。 因此,我们即将从 CVS 迁移到 Perforce,我最近学到了一个避免更改每个工作区的 P4CLIENT 的好方法,即在工作区根目录
我正在为一段代码编写测试,其中包含我试图涵盖的 IOException 捕获。 try/catch 看起来像这样: try { oos = new ObjectOutputStream(new
我正在尝试在新闻项目滚动之间添加延迟。我知道 $.each() 通过不等待动画完成来完成其工作,但我想知道如何制作它,以便一次向上滚动一个项目并等到最后一个动画完成后再继续在循环中。 $(functi
假设已经编写了一个方法,需要一个排序列表作为其输入之一。当然这将在代码中进行注释和记录,param 将被命名为“sortedList”,但如果有人忘记,则会出现错误。 有没有办法强制输入必须排序?我正
我正在尝试将传入请求重定向到 https://www.domain.com/和所有 https://www.domain.com/ {所有页面}并且没有什么麻烦。我试过的方法: 添加此行:Redire
我将如何实现以下内容: title_selection = raw_input("Please type in the number of your title and press Enter.\n%
我有一个登录表单,我需要强制关闭自动完成功能。我试过了 jquery: $('#login').attr("autocomplete", "off"); HTML: Javascript:docume
我想知道我应该怎么做才能强制从 dev 分支 merge 到我的 master 分支?使用“git merge dev”会导致很多冲突。但是,我不想单独处理它们。相反,我只是想使用我的 dev 分支中
当安装 Hl7.Fhir.DSTU2 和 Hl7.Fhir.R4 这两个 Nuget 包时,我们得到如下信息: DSTU2 包似乎在使用 Hl7.Fhir.Support.Poco 版本 3.4.0
我正在尝试让一个功能组件在 testFn 执行时强制重新渲染。我想使用状态来做到这一点(如果有更好的方法请说出来),这似乎成功地强制重新渲染但只有两次,然后什么都没有。 我构建了一个简单的演示来模拟这
默认情况下,g++ 似乎会省略未使用的类内定义方法的代码。示例 from my previous question : struct Foo { void bar() {} void baz(
我正在尝试使用 here 中介绍的技术使我的网站背景以比内容慢的速度滚动。我不希望背景固定,只希望更慢。 这是 HTML 的样子: .parallax { perspective: 1px;
我能找到的最相似的问题是 'how to create a row of scrollable text boxes or widgets in flutter inside a ListView?'
我有以下 eslint 配置: "object-curly-newline": ["error", { "ImportDeclaration": "never",
我正在使用 TinyMCE 插件并将 valid_elements 选项设置为: "a[href|target:_blank],strong/b,em/i,br,p,ul,ol,li" 即使没有列出数
您好,我想使用以下命令放置多行描述 p4 --field Description="MY CLN Header \\n my CLN complete description in two -thre
我是一名优秀的程序员,十分优秀!