我想使用getline()和realloc()將文件讀入一個字符串數組。過去我使用非常類似的代碼來標記字符串,並且一切正常。我會考慮樣本輸入文件Realloc覆蓋數組的內容?
1
2
3
4
5
下面的代碼:
char** read_input(const char* input_file, char* line){
FILE *fp;
size_t len = 0;
size_t nums = 0;
ssize_t read;
char** res = NULL;
if ((fp = fopen(input_file, "r")) == NULL){
printf("Incorrect file\n", strerror(errno));
exit(EXIT_FAILURE);
}
while ((read = getline(&line, &len, fp)) != -1){
if ((res = realloc(res, sizeof(char*) * ++nums)) == NULL)
exit(EXIT_FAILURE);
char to_strip[sizeof(read) * sizeof(char)];
strcpy(to_strip, line);
if (line[read - 1] == '\n')
to_strip[read - 1] = 0;
else
line[read] = 0;
res[nums - 1] = to_strip;
}
free(line);
if ((res = realloc(res, sizeof(char*) * (nums + 1))) == NULL)
exit(EXIT_FAILURE);
res[nums - 1] = 0;
return res;
}
循環後,如果我打印數組的內容,我得到:
5
5
5
5
5
儘管事實上如果我在循環中調用print,在每次分配res之後,我都會得到正確的數字。這實在讓我感到困惑,因爲除了使用realloc之外,我看不出什麼可能是錯誤的,但我認爲realloc保存了數組內容。謝謝。
這已經解決了這個問題,謝謝。在這種情況下使用strdup()是有意義的,我想我應該回顧一下指針,我有一段時間沒有用過它們。 – wdonahoe