2010-04-15 26 views
7

不好意思寫了一篇關於如此簡單的文章,但我沒有看到我在這裏做錯了什麼。如何打印有限數量的字符?

char data[1024]; 
DWORD numRead; 

ReadFile(handle, data, 1024, &numRead, NULL); 

if (numRead > 0) 
    printf(data, "%.5s"); 

我的上述目的是從文件中讀取數據,然後只打印出5個字符。但是,它會打印出全部1024個字符,這與我正在閱讀的here相反。目標當然是做類似的事情:

printf(data, "%.*s", numRead); 

我在做什麼錯在這裏?

回答

24

你以錯誤的順序的參數。本應該寫成:

printf("%.5s", data); 

printf("%.*s", numRead, data); 

的第一個參數是printf格式說明,隨後的所有參數(這取決於你的符)。

+0

是點('.')在上面的格式字符串不必要的? – kevinarpe 2017-02-05 08:18:15

+0

@kevinarpe - no。 – 2017-02-06 21:53:07

4

我認爲你的參數的順序被切換到printf

printf("%.5s", data); // formatting string is the first parameter 
-2

printf語句使用的語法錯誤,而.number僅用於數值變量。

所以應該

int i; 
for(i=0;i<5;i++) 
    printf("%c", data[i]); 
+0

。數字在字符數組中工作得很好,他只需要按照正確的順序放置參數。 – 2010-04-15 00:23:43

+2

對於字符串,精度(即.numbers)會通知printf從字符串中打印不超過N個字符。如果您的字符串不是'\ 0'終止,這非常有用。 – 2010-04-15 00:27:12

+1

哇。學到了新東西。我總是假設。謝謝。 – sjchoi 2010-04-15 15:38:26

1

你不是()調用正確的printf。

int printf (const char * format, ...); 

這意味着...

printf("%.5s", data);