我想比较两个日期,一个在当前日期时间,一个在一个列表中记忆。如果这些日期具有相同的年份、月份和日期,则在列表中添加一个旧日期的值:如果没有,则在列表中创建一个新元素。
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;
};但是如果我打印这两个值,我就打印相等的值。
发布于 2021-04-09 10:27:24
gmtime()返回一个指针。对gmtime()的连续调用(全部返回指针)可能返回指向同一内存的指针。
复制指向实际对象的内存。
struct tm data_list; // not a pointer!
data_list = *gmtime(&pointer->data); // copy value注意: POSIX引入了,它的行为与预期的一样。
// for POSIX systems
struct tm data_list; // still not a pointer
gmtime_r(&pointer->data, &data_list);https://stackoverflow.com/questions/67019336
复制相似问题