c逐行讀取文件我編寫這個函數(shù)是為了從文件中讀取一行:const char *readLine(FILE *file) {
if (file == NULL) {
printf("Error: file pointer is null.");
exit(1);
}
int maximumLineLength = 128;
char *lineBuffer = (char *)malloc(sizeof(char) * maximumLineLength);
if (lineBuffer == NULL) {
printf("Error allocating memory for line buffer.");
exit(1);
}
char ch = getc(file);
int count = 0;
while ((ch != '\n') && (ch != EOF)) {
if (count == maximumLineLength) {
maximumLineLength += 128;
lineBuffer = realloc(lineBuffer, maximumLineLength);
if (lineBuffer == NULL) {
printf("Error reallocating space for line buffer.");
exit(1);
}
}
lineBuffer[count] = ch;
count++;
ch = getc(file);
}
lineBuffer[count] = '\0';
char line[count + 1];
strncpy(line, lineBuffer, (count + 1));
free(lineBuffer);
const char *constLine = line;
return constLine;}函數(shù)正確地讀取文件,并且使用printf,我看到Construcline字符串也被正確讀取。但是,如果我使用這個函數(shù),例如:while (!feof(myFile)) {
const char *line = readLine(myFile);
printf("%s\n", line);}printf輸出胡言亂語。為什么?
3 回答

汪汪一只貓
TA貢獻1898條經(jīng)驗 獲得超8個贊
getline()
#define _GNU_SOURCE#include <stdio.h>#include <stdlib.h>int main(void){ FILE * fp; char * line = NULL; size_t len = 0; ssize_t read; fp = fopen("/etc/motd", "r"); if (fp == NULL) exit(EXIT_FAILURE); while ((read = getline(&line, &len, fp)) != -1) { printf("Retrieved line of length %zu:\n", read); printf("%s", line); } fclose(fp); if (line) free(line); exit(EXIT_SUCCESS);}

繁星淼淼
TA貢獻1775條經(jīng)驗 獲得超11個贊
FILE* fp;char buffer[255];fp = fopen("file.txt", "r");while(fgets(buffer, 255, (FILE*) fp)) { printf("%s\n", buffer);}fclose(fp);
- 3 回答
- 0 關(guān)注
- 723 瀏覽
添加回答
舉報
0/150
提交
取消