2012-07-15 127 views
1

我試圖使用掃描fscanf一個文件,並把串入尺寸20的字符數組如下:FSCANF不掃描文件

char buf[20]; 
fscanf(fp, "%s", buf); 

文件fp目前包含:1 + 23

我在buf設定的指針的第一個元素如下:

char *p; 
p = buf; 

印刷bufprintf("%s", buf)僅產生1。試圖增加p並打印輸出垃圾(p++; printf("%c", *p))。

我在做什麼錯在fscanf在這裏?爲什麼它不是從文件中讀取整個字符串?

+1

使用'與fgets ()'來讀取一行,然後,也許,'sscanf()'來解析它。 – 2012-07-15 14:36:35

回答

7

fscanf(以及相關的功能)與格式字符串%S」將嘗試讀取儘可能多的字符,因爲它可以在不包括空格,在這種情況下,它會找到的第一個字符(1)並存儲它,然後它會打到一個空間(),因此停止搜索。


如果您想閱讀整條生產線一次考慮使用fgets,也更安全的使用,因爲你需要指定目標緩衝區的大小作爲它的參數之一。

fgets會盡量在最大長度的緩衝減1個字符閱讀(最後一個字節保存後空字節),它將停止在任讀取人物衆多,創下了新行或文件的結尾。

fgets (buf, 20, fp); 

文檔的鏈接爲