分配上不兼容的类型-系统日期的C程序
我试图通过调用struct tm来解析系统日期,并在解析为单独的日期、月份和年份之前获取当前时间。这是我目前的代码:分配上不兼容的类型-系统日期的C程序,c,types,C,Types,我试图通过调用struct tm来解析系统日期,并在解析为单独的日期、月份和年份之前获取当前时间。这是我目前的代码: /* Parses a system date structure 'system_date' into a structure date 'parsed_date'.*/ int parse_system_date(struct tm system_date, date * parsed_date) { time_t ts; struct tm t;
/* Parses a system date structure 'system_date' into a structure date 'parsed_date'.*/
int parse_system_date(struct tm system_date, date * parsed_date) {
time_t ts;
struct tm t;
ts = time(NULL);
t = localtime(&ts);
/* scan the year, month and year from the input string*/
//printf("Current Date: %d/%d/%d\n",
// current_time->tm_mday, current_time->tm_mon + 1, current_time->tm_year + 1900);
const int ret = sscanf(system_date, "%d/%d/%d",
&parsed_date->(tm_mday),
&parsed_date->(tm_month + 1),
&parsed_date->(tm_year + 1900));
return ret;
}
它是从主界面调用的:
struct tm t;
char system_date[20];
fgets(system_date, 20, stdin);
parse_system_date(system_date, &t);
printf("Today's date is: %s\ndd = %d, mm = %d, yy = %d\n", system_date, t.tm_mday, t.tm_mon, t.tm_year);
我得到了一个错误:
date.h:30: error: incompatible types in assignment
行中:
t = localtime(&ts);
&parsed_date->(tm_mday).
以及:
对于线路:
t = localtime(&ts);
&parsed_date->(tm_mday).
有什么想法吗?谢谢你的帮助!需要注意的是:我是一个初学者程序员,但由于我刚刚开始攻读博士学位,主要从事编程,所以我完全是一个新手。
system\u date
在函数调用中是main
和struct tm system\u date
中的char*
。
将函数调用更改为
int parse_system_date(char *system_date, date * parsed_date)
函数
localtime
用于返回struct tm*
(即指向结构的指针)
您正试图将其分配给变量t
,该变量的类型为struct tm
(注意:其中没有指针)
不能将指针指定给非指针
我建议改为:
int parse_system_date(struct tm system_date, date * parsed_date) {
struct tm* pt;
[....]
pt = localtime(&ts);
现在,我将让您查看
sscanf
的文档,并告诉我们sscanf
的参数1应该是什么,以及您实际传递的内容。localtime返回指向结构的指针:
正如
人工本地时间
所述:
struct tm*localtime(const time\u t*timep)
t=localtime(&ts)
中的t
是一个struct tm
而不是struct tm*
,并且localtime
返回一个指针
第二件事,你没有真正向我们展示
parsed_date
的外观(没有定义date
结构)。而且system\u date
是一个struct tm
,那么为什么您希望它在sscanf
中被视为const char*
?一个适合您的工作解决方案
#include <stdio.h>
#include <time.h>
/* Parses a system date structure 'system_date' into a structure date 'parsed_date'.*/
void parse_system_date(char* system_date, struct tm **parsed_date) {
time_t ts;
int ret;
int year;
int month;
int day;
ts = time(NULL);
*parsed_date = localtime(&ts);
sscanf(system_date,"%d/%d/%d",&day,&month,&year);
(*parsed_date)->tm_mday = day;
(*parsed_date)->tm_mon = month + 1;
(*parsed_date)->tm_year = year + 1900;
}
int main(){
struct tm* t;
char system_date[20]={'\0'};
fgets(system_date, 20, stdin);
parse_system_date(system_date, &t);
printf("Today's date is: %s\ndd = %d, mm = %d, yy = %d\n", system_date, t->tm_mday, t->tm_mon, t->tm_year);
return 0;
}
函数签名也是错误的。最好不要只使用链接给出答案。因为海报是编程新手,他们熟悉这个网站似乎很重要,然后指向它。但不要在回答中只给出链接。如果这个网站会同时消失呢?你的回答毫无用处。它也是一个C++参考站点,所以它不是真正的关系。我不仅发布了一个链接——我第一次提到LoalTalk返回指针,这就是海报的问题所在。我认为没有必要记下这个答案