C 从结构指针添加int

C 从结构指针添加int,c,pointers,struct,C,Pointers,Struct,我试图增加C中日期结构的天数。我不断得到一个返回,其中内存似乎在增加[而不是结构中的实际整数天] 例如,如果我输入: 2018年10月2日 我应该 输出: 2018年3月10日 相反,我得到: 32594/10/-352487872 我认为我在方法中没有正确使用指针:advanceDay(structdate d) #包括 结构日期{ 国际年; 整月; 国际日; }; /*功能原型*/ 作废打印日期(结构日期); 无效读取日期(结构日期*); 结构日期提前日期(结构日期); 内部主(空){ 结构

我试图增加C中日期结构的天数。我不断得到一个返回,其中内存似乎在增加[而不是结构中的实际整数天]

例如,如果我输入:

2018年10月2日

我应该

输出:

2018年3月10日

相反,我得到:

32594/10/-352487872

我认为我在方法中没有正确使用指针:
advanceDay(structdate d)

#包括
结构日期{
国际年;
整月;
国际日;
};
/*功能原型*/
作废打印日期(结构日期);
无效读取日期(结构日期*);
结构日期提前日期(结构日期);
内部主(空){
结构日期今天,明天;
readDate(&今天);
打印日期(今天);
明天=提前日(今天);
打印日期(明天);
返回0;
}
/*在此处添加函数定义*/
作废打印日期(结构日期d){
printf(“%02d/%02d/%04d\n”,d.月,d.日,d.年);
}
无效读取日期(结构日期*d){
scanf(“%d%d%d”,&(d->year),&(d->month),&(d->day));
}
结构日期提前日期(结构日期d){
d、 日=d.日+1;
}
我试着改变
d.day=d.day+1
d.day=(*d.day)+1

但是我犯了一个错误。我尝试了->并在*

中移动,您声明
advanceDay
以返回一个值,但您不返回任何内容。通过未能从此函数返回值,然后尝试使用返回值来调用

创建传入的
结构日期的副本,对副本执行操作并返回它

struct date advanceDay(struct date d) {
    struct date nextDay;
    nextDay.day = nextDay.day+1;
    return nextDay;
}

请注意,
advanceDay
没有显式返回任何内容,这会导致未定义的行为(可能会读取未初始化的内存-编译器应该对此发出警告)

相反,您可以向函数传递一个
struct date*
,并在适当的位置对其进行更新:

void advanceDay(结构日期*d){
d->day=d->day+1;
}
请注意,您的main也需要相应地更改:

int main(无效){
今天的结构日期;
readDate(&今天);
打印日期(今天);
AdvancedDay(&today);/*此处无重新运行值*/
printDate(今天);/*今天已更新到位*/
返回0;
}

我想你忘了在你的固定代码中将返回类型更改为
void
。@kopecs确实,复制和错误:-(感谢你的注意、编辑和修复)。
struct date advanceDay(struct date d) {
    struct date nextDay;
    nextDay.day = nextDay.day+1;
    return nextDay;
}