为什么这个工具不打印字符串?

时间:2011-08-17 13:21:10

标签: c printf

这个工具是我学习如何使用字符串。但如果它完成了,有时它应该比较两个日期(系统日期和输入的生日日期)并告诉用户该人的年龄。但我卡住了我想先尝试一些基础知识,所以输入的字符串会被拆分为日月和年,然后它应该打印字符串。 但我真正的目标是,将它们转换为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");

 }

2 个答案:

答案 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。