2012-02-24 38 views
2

我有一個文件,我想從中讀取並打印到屏幕上。我使用XCode作爲我的IDE。這裏是我的代碼...fread()把奇怪的東西放入char數組

fp=fopen(x, "r"); 
char content[102]; 
fread(content, 1, 100, fp); 
printf("%s\n", content); 

該文件的內容是「培根!」它打印出的是\254\226\325k\254\226\234

我已經搜遍了這個答案,但C中文件I/O的文檔似乎很少,而且有一點不太清楚。 (對我來說至少...)

編輯:我切換到只讀,不追加和讀取,並切換fread()中的兩個中間參數。現在它打印出Bacon!\320H\320這些事情是什麼意思?東西在反斜槓數字號碼或字母。我也轉而按照建議打印出來。

+0

什麼文件中的內容? – Dani 2012-02-24 15:22:32

+1

永遠不要使用從任何地方讀取的格式字符串!在這種情況下,使用'puts()'或'printf(「%s」,內容)' – ydroneaud 2012-02-24 15:23:18

+0

@Dani這個問題告訴你它是「培根!」你懷疑培根的力量嗎? – CoffeeRain 2012-02-24 15:24:03

回答

9

您正在打開的文件追加和閱讀。你應該打開它閱讀,或將你的閱讀指針移動到你要閱讀的地方(我假設的開頭)。

FILE *fp = fopen(x, "r"); 

FILE *fp = fopen(x, "a+"); 
rewind(fp); 

此外,fread(...)不零終止您的字符串,所以你應該在打印前終止它:

size_t len = fread(content, 1, 100, fp); 
content[len] = '\0'; 
printf("%s\n", content); 
+0

'「a +」'表示附加_and_閱讀。 – 2012-02-24 15:26:42

+0

a +打開閱讀和追加(根據我的本地手冊頁),它應該從一開始就讀取文件...(我今天學到了一些東西!) – vmpstr 2012-02-24 15:27:38

+0

@JoachimPileborg好點,我更新了答案以反映這一點。謝謝! – dasblinkenlight 2012-02-24 15:29:49

2

我想,你的意思是這樣的:

printf("%s\n", content); 
0

一個可能的原因是,直到它找到一個字符串結束你不終止你讀取數據,所以printf打印緩衝區。

1

可能:

fp = fopen(x, "a+"); 
if(fp) 
{ 
    char content[102]; 
    memset(content, 0 , 102); 

    // arguments are swapped. 
    // See : http://www.cplusplus.com/reference/clibrary/cstdio/fread/ 
    // You want to read 1 byte, 100 times 
    fread(content, 1, 100, fp); 

    printf("%s\n", content); 
}