2017-08-14 19 views
0

我有這個項目的問題,我嘗試搜索論壇上的答案,但我什麼也沒找到。Sscanf由命令行採取的字符串

struct orario { 
int hours; 
int minutes; 
int seconds; 
char *format; 
}orario1; 

int main(int argc, char *argv[]) { 
sscanf(argv[1],"%d:%d:%d %s",&orario1.hours,&orario1.minutes,&orario1.seconds,orario1.format); 

printf("%d:%d:%d %s",orario1.hours,orario1.minutes,orario1.seconds,orario1.format); 

的輸出是數字部分,但字符串(例如AM或PM)正確是出乎意料的(空)。

我無法識別我的錯誤,有人可以找到並告訴我?!

謝謝。

+0

在使用'argv [1]'之前,你應該確實檢查用戶是否提供了一個(或多個)參數。如果沒有提供參數,那麼'argv [1]'將是一個空指針,'argv [2 ]'而且會超出界限。這個檢查是通過測試'argc> = 2'完成的。 –

+0

是的,我知道,我會做。 – Fabio

回答

1

您的代碼有未定義的行爲,因爲format是一個未初始化的指針。

使用

char format[8]; 

%7s。在依賴具有值的變量之前檢查返回值。

+0

我按照你的說法試過,但結果是: 輸入:./project 21:3:2 AM 輸出:21:3:2 – Fabio