这个工具是我学习如何使用字符串。但如果它完成了,有时它应该比较两个日期(系统日期和输入的生日日期)并告诉用户该人的年龄。但我卡住了我想先尝试一些基础知识,所以输入的字符串会被拆分为日月和年,然后它应该打印字符串。 但我真正的目标是,将它们转换为int值,以便我可以用它们来计算。
但由于某些原因,该工具不打印输入的字符串,它只打印3 \n
,我无法弄清楚问题。
请帮忙。
编辑:再次修复它几乎准备好只有“btag”会有些麻烦。 “bmonat”和“bjahr”工作得很好,谢谢你到目前为止!
/*age check (c) By Tim Hartmann*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <string.h>
int main ()
{
SYSTEMTIME time;
GetSystemTime (&time);
char name[20], bday[10], bjahr[4], bmonat[3], btag[3];
int year = time.wYear;
int month = time.wMonth;
int day = time.wDay;
int intjahr, intmonat, inttag;
printf("\n\n today is the: %i.%i.%i \n\n",day,month,year);
printf(" please insert Birthdate (dd.mm.jjjj).\n\n");
gets(bday);
strncpy(bjahr , &bday[6], 4);
bjahr[4] = '\0';
strncpy(bmonat, &bday[3], 2);
bmonat[2]= '\0';
strncpy(btag , &bday[0], 2); /* here is the probleme */
btag[2] = '\0';
printf("\n %s \n", bjahr);
printf("\n %s \n", bmonat);
printf("\n %s \n", btag);
system("PAUSE");
}
答案 0 :(得分:0)
你声明的字符串(bday,bjahr,bmonat,btag)缺少1个字符来存储\ 0
例如,btag应该是btag [3],特别是因为你在源代码中btag[2] = 0
进行了
你能尝试在你的所有字符串中再添加1个字符并检查它是否能纠正所有字符串吗?
它应该是这样的:
char name[21], bday[11], bjahr[5], bmonat[3], btag[3];
如果你想要名字最多20个字符,bday要10个,......
然后,在提取日期时:
strncpy(btag, &bday[0], 2);
btag[2] = '\0';
这样,你从btag中的bday复制2个字符(从偏移0开始),然后将第3个字符设置为'\ 0'以结束字符串
答案 1 :(得分:0)
这有一些问题。对于初学者, bjahr [4] = 0; bmonat [2] = 0; btag [2] = 0;
这些都试图访问超出缓冲区大小限制的内容。
另一件事是你可能想要
bjahr[4] = '\0';
bmonat[2]= '\0';
btag[2] = '\0';
相反,因为这会给你空字符而不是0。