C 逐行读取文本,并为每行分配变量
我已经完成了让我的c程序逐行读取文本的任务。这是最简单的部分,至少在我看来是这样。我现在需要做的是为每行分配变量。例如,文本文件的第一行将等于变量line1 还是这个C 逐行读取文本,并为每行分配变量,c,file,variables,line,C,File,Variables,Line,我已经完成了让我的c程序逐行读取文本的任务。这是最简单的部分,至少在我看来是这样。我现在需要做的是为每行分配变量。例如,文本文件的第一行将等于变量line1 还是这个 char line1 = (text from line one) char line2 = (text from line two) 到目前为止,我的代码是: char line[1000] = ""; FILE *ifp; ifp = fopen("Tree-B.txt", "r");
char line1 = (text from line one)
char line2 = (text from line two)
到目前为止,我的代码是:
char line[1000] = "";
FILE *ifp;
ifp = fopen("Tree-B.txt", "r");
if (ifp == NULL)
{
printf("Error opening file!\n");
exit(1);
}
while (fscanf(ifp, "%s", line) == 1)
{
printf("%s ", line);
}
printf("\n");
fclose(ifp);
return 0;
我完全不知道该怎么做。你可以用一个指针数组来解决这个问题
char line[1000] = ""; // assume each line has at most 999 chars (1 space for NUL character)
char *lines[1000] = { NULL }; // assume max number of lines is 1000
int idx = 0;
FILE *ifp;
ifp = fopen("q2.cpp", "r");
if (ifp == NULL)
{
printf("Error opening file!\n");
exit(1);
}
while(fgets(line, sizeof(line), ifp) != NULL)
{
lines[idx] = strdup(line);
printf("%s", lines[idx]);
idx++;
}
注:
这种方法使用的是不是POSIX官方C标准的strdup。但是,您可以将strdup函数本身放入其中
fgets比fscanf更受欢迎,所以我改变了这种方式
1000 limis是具有启发性的-您可以/应该将这些常量更改为程序本身更有意义的值
如果要为文件内容动态分配内存,您可以引用。您可以使用数组。您需要使用malloc或数组行[1000][1000]进行分配,但这仅限于1000行和999个字符。@Stargateur为什么999个字符,为什么不1000个?fscanfifp,%s,行不节省空间。读单词比读句子更有用。可以使用FGET代替。
#include <stdio.h>
#define MAX_LINES 1000
#define MAX_LINE_LENGTH 200
int main()
{
char fileContents[MAX_LINES][MAX_LINE_LENGTH];
int lineCount = 0;
FILE *ifp = fopen("Tree-B.txt", "r");
if (ifp == NULL)
{
printf("Error opening file!\n");
exit(1);
}
while (fgets(fileContents[lineCount++], MAX_LINE_LENGTH, ifp) != NULL);
fclose(ifp);
printf("File Contents:\n");
for (int i = 0; i < lineCount-1; ++i)
{
printf("%s", fileContents[i]); // or fputs
}
return 0;
}