簡體   English   中英

將字符串拆分為不同的部分,沒有空格和分隔符

[英]split string into different parts without spaces and dividers

我有一個字符串 2020122812.txt,我希望能夠從中提取四位數年份、二位數月份、二位數日期和二位數小時的數字。

下面是我嘗試執行此操作的代碼片段,其中 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.  

如何調整此代碼以獲得我想要的結果?

printf()不同, scanf()中的轉換說明符沒有指定精度的選項。 讀取的最大長度應指定不帶. .

固定代碼:

#include <stdio.h>

int main(int argc, char *argv[])
{
     int YYYY;
     int MM;
     int DD;
     int HH;

     if (argc < 2) return 1;

     if (sscanf(argv[1],"%4d%2d%2d%2d.txt",&YYYY,&MM,&DD,&HH) != 4) return 1;
     printf("YYYY=%d\n",YYYY);
     printf("MM=%d\n",MM);
     printf("DD=%d\n",DD);
     printf("HH=%d\n",HH);
}

這些錯誤也已在此代碼中修復:

  • 不包括必需的 header。
  • 未檢查參數的數量。
  • 未檢查sscanf()的結果。
  • 使用了未聲明的標識符。
  • &sscanf()的 arguments 中丟失。
  • 復制輸入只是為了產生緩沖區溢出的風險。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM