动态读取文本文件并放入 C 中的指针字符数组
Posted
技术标签:
【中文标题】动态读取文本文件并放入 C 中的指针字符数组【英文标题】:Reading a text file dynamically and put into a pointer char array in C 【发布时间】:2016-11-22 14:21:09 【问题描述】:int i=0;
int numProgs=0;
char* input[500];
char line[500];
FILE *file;
file = fopen(argv[1], "r");
while(fgets(line, sizeof line, file)!=NULL)
/*check to be sure reading correctly
add each filename into array of input*/
input[i] = (char*)malloc(strlen(line)+1);
strcpy(input[i],line);
printf("%s",input[i]);/*it gives the hole line with\n*/
i++;
/*count number of input in file*/
numProgs++;
/*check to be sure going into array correctly*/
fclose(file);
我不知道每行输入 txt 的大小,所以我需要动态执行。 我需要使用 char* input[] 这种类型的数组,而且我需要用 int numProgs 保存行号。 输入文本文件有多行,每行的字符大小未知。
【问题讨论】:
可能重复:***.com/questions/8236/… 你调用分配内存说char *line
,而不是有一个固定的数组。调用fgets
后,检查是否读取了newline
。如果是的话,你得到了整条线。如果没有,请重新分配一个更大的数组,并根据需要读取更多数组,以获取整行。但是不要在每一行之后free(line)
- 保持分配直到你完成。
@schil227 这个 Q 是文件的行数。
然后可能是 ***.com/questions/2137156/… - 基本上遍历每个字符直到找到行尾字符 (\n)
注意:对相关变量使用struct
。每个组件的单独数组是 soo 60ies/70ies
【参考方案1】:
FILE *file;
file = fopen("test.txt", "r");
fseek(file, 0, SEEK_SET);
int numRow = 1, c;
while ((c = fgetc(file)) != EOF)
if (c == '\n')
numRow++;
fseek(file, 0, SEEK_SET);
char **input;
input = malloc(sizeof(char) * numRow);
int i, j = 0, numCol = 1, curPos;
for (i = 0; i < numRow; i++)
curPos = (int)ftell(file);
while((c = fgetc(file)) != '\n')
numCol++;
input[i] = malloc(sizeof(char) * numCol);
fseek(file, curPos, SEEK_SET);
while((c = fgetc(file)) != '\n')
input[i][j++] = c;
input[i][j + 1] = '\n';
numCol = 1;
j = 0;
【讨论】:
输入文本文件多行,每行字符大小未知。 啊,我明白了。检查更新的答案,看看是否有效。 为什么会出现死循环?所以给出了运行时间错误 while((c = fgetc(file)) != '\n') numCol++;它给出了该状态下的运行时错误以上是关于动态读取文本文件并放入 C 中的指针字符数组的主要内容,如果未能解决你的问题,请参考以下文章