【发布时间】:2021-04-05 15:29:42
【问题描述】:
我有一个字符串 2020122812.txt,我希望能够从中提取四位数年份、二位数月份、二位数日期和二位数小时的数字。
下面是我的代码的 sn-p,我曾尝试在其中输入 2020122812.txt 作为第一个参数:
int main(int argc, char *argv[])
{
char txtfName[500];
int bYYYY;
int bMM;
int bDD;
int bHH;
sprintf(txtName,"%s",argv[1]);
sscanf(txtName,"%.4d%.2d%0.2d%0.2d.txt",YYYY,MM,DD,HH);
printf("YYYY=%d\n",YYYY);
printf("MM=%d\n",MM);
printf("DD=%d\n",DD);
printf("HH=%d\n",HH);
}
不幸的是,我得到了 YYYY、MM、DD、HH 的零,而不是预期的结果:
2020 for YYYY
12 for MM
28 for DD
12 for HH.
如何调整此代码以获得我想要的结果?
【问题讨论】:
-
YYYY、MM、DD和HH在此处未声明。请发布Minimal, Reproducible Example。同样的东西被传递给scanf()和printf()来处理整数也是值得怀疑的。还有一点需要注意的是,最好将argv[1]直接用于sscanf(),而不是仅仅为了创建缓冲区溢出风险而进行复制。