c - 如何在C中比较两个没有秒的日期
问题描述
我想比较两个日期,一个在当前日期时间,一个在列表中。如果这些日期具有相同的年、月和日,我在列表中的旧日期中添加一个值:如果不是,我在列表中创建一个新元素。
struct entry{
time_t date;
int quantity;
struct entry* next;
};
我调用find_list
, 来查找和比较当前日期和记忆的日期
int find_list(struct entry* head, time_t data, int quantita){
struct tm* data_value, *data_list;
struct entry* pointer = head;
time(&data);
data_value = gmtime(&data);
while(pointer){
data_list = gmtime(&pointer->date);
//printf("Tempo value:%s\nTempo lista: %s\n", asctime(data_value), asctime(data_list));
if(data_value->tm_year == data_list->tm_year && .....){
pointer->quantity += quantita;
return 1;
}
pointer = pointer->next;
}
return 0;
};
但如果我 printf 两个值,我打印等于值
解决方案
gmtime()
返回一个指针。连续调用gmtime()
(都返回一个指针)可能会返回一个指向同一内存的指针。
复制指向真实对象的内存。
struct tm data_list; // not a pointer!
data_list = *gmtime(&pointer->data); // copy value
注意:引入了 POSIX gmtime_r()
,其行为与预期一致。
// for POSIX systems
struct tm data_list; // still not a pointer
gmtime_r(&pointer->data, &data_list);
推荐阅读
- python - 编码器-解码器 LSTM 模型给出“nan”损失和预测
- tar - 提取时从 .tar 存档中删除文件
- linux - 如何在没有密码的情况下在 Alpine Linux 中通过 ssh 登录?
- wireshark - Tshark - 如何仅使用 tshark 显示 tcp 播放负载的解剖树?
- vuejs2 - 如何从 vuex 中的子组件向任何父组件触发事件
- ios - 从原生 iOS 应用程序访问 Graph API 以创建用户
- ssl - 错误 openssl 握手服务器不响应
- amazon-web-services - 属性 VPCZoneIdentifier 的值必须是字符串列表类型
- react-native - java.lang.UnsatisfiedLinkError:找不到要加载的 DSO:libfbjni.so 结果:0
- python - Python CSV 获取特定的行数据