分配上不兼容的类型-系统日期的C程序

分配上不兼容的类型-系统日期的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;

我试图通过调用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;

     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返回指针,这就是海报的问题所在。我认为没有必要记下这个答案