我正在製作一個加載小文本文件的c程序。我將文本文件的讀取內容存儲在char數組中。這是加載文件的函數。字符數組中的C隨機字符
void load_text_file(char* filename) {
FILE *fp;
char *buf = malloc(255 * sizeof(char));
if (!buf) return NULL;
fp = fopen(filename, "r");
fgets(buf, 255, (FILE*)fp);
int i;
for(i=0;i<255;i++) {
printf("%d - %c\n", i, buf[i]);
}
}
當for循環打印輸出時,會發生這種情況。 (這是輸出的一個縮短的版本,我不希望把所有255個字符的這個問題。)
0 - H
1 - e
2 - l
3 - l
4 - o
5 -
6 - W
7 - o
8 - r
9 - l
10 - d
11 - !
//Random chars past this point
12 -
13 -
14 - „
15 -
16 - „
//etc... etc... etc...
96 - Å
97 -
98 -
99 - Å
100 - å
101 - è
102 -
//etc... etc... etc...
//all the way up to 255 chars
我不能確定是什麼原因造成這一點。
我想知道是什麼導致這種情況,以及我如何解決這個問題。
假設您正在閱讀的文件只有12個字節長。你期望陣列在字節#12以外的區域保持什麼?爲什麼? –
你的函數泄漏內存。那麼爲什麼''返回NULL;'在'void'函數中?只需將你的緩衝區聲明爲一個靜態變量:'static char buf [255];',並且使用'sizeof(buf)'代替全部硬編碼。您不必處理動態分配,只要您打算保持緩衝區長度不變,就完全不必要。 –
OT:'load_text_file()'錯過了'fclose()''fp'。 – alk