2009-12-06 68 views

回答

6

由於%s格式說明告訴printf該參數是一個空終止字符串。您給printf一個字符 - argv數組第二個元素中的第四個字符。

如果你想打印從第四個字符的字符串末尾的子串,你可以做到這一點,你只需要得到一個指向該角色:

printf("%s\n", &argv[1][3]); 

,或者,如果你喜歡:

printf("%s\n", argv[1] + 3); 
+0

但它是一個空終止的字符串,我只是希望它從偏移量3開始,並保持打印直到空。 那麼我將如何實現同樣的目標呢? – Fred 2009-12-06 07:04:22

+0

謝謝,我剛剛看到你添加了一些信息給你的評論。 – Fred 2009-12-06 07:05:39

2

「%s」表示一個foramt字符串需要一個「字符*」的說法,但你傳遞一個「字符」等你拿垃圾(可能是崩潰)。格式化字符串中的「%c」需要一個'char'參數,這就是你所給的,所以它的工作原理。

+0

不太可能發生崩潰而不是編譯器錯誤。 GCC(至少)可以對格式化字符串函數進行類型檢查,比如'printf'和'scanf'。 – 2010-02-17 21:41:44