C,读取文件并拆分

时间:2012-04-16 12:40:06

标签: c split fopen

我有一个输入文件(txt),其中只有两行,以\n分隔。

例如:

FOO
BAR

现在我必须将第一行(在我的示例中为FOO)放在char **a中,将第二行(BAR)放在char **b中。

我不知道如何做这项工作;你能解释一下吗?

2 个答案:

答案 0 :(得分:2)

如果要使用动态分配,则必须使用char指针(char *, not char **)分配char向量:

#define MAX_CHAR 100
char *buffer = (char*) malloc (MAX_CHAR * sizeof(char));

然后你使用fgets函数从流中读取字符并将它们作为C字符串存储到缓冲区中:

FILE * pFile;
pFile = fopen ("myfile.txt" , "r");
if (pFile == NULL) 
   perror ("Error opening file");
else {
  if(fgets (buffer, MAX_CHAR, pFile) != NULL)
    puts (buffer);
}

fclose (pFile);

通过这种方式,您可以将第一行存储到缓冲区中,使用两次fgets来保存第一行和第二行,也可以使用非动态向量。

不要忘记:

free(buffer);

在我看来,你不需要一个char **,因为你的char *缓冲区里面包含所有文字,你可以使用strtok来分割它。

答案 1 :(得分:0)

我不知道为什么那里有两个双指针,我认为没有必要。

要从.txt读取文件,您需要一个名为FILE的内容。用它来打开.txt文件,例如:  FILE *open = fopen("a.txt", "r");; *open是将通过代码使用的名称(作为已打开的文件),而a.txt此处表示您要打开的.txt文件,{{1}在这种情况下,模式是r,这意味着您只想从文件中读取数据。

打开文件后,在循环的帮助下读取数据(当然是),直到文件结束。这里我们得到的条件如下:read

你得到了循环,现在你必须阅读数据。要从文件中读取数据,您需要一个名为while(!feof(open))的函数,它将从文件中读取数据。你像这样使用它:fscanf;虽然fscanf(open,"%s\n", temp[i]);是之前打开过的文件的名称,但open表示您希望在字符串到达​​"%s\n"之前读取字符串,而\n是变量所在的位置存储数据。

现在你已经获得了数据,你不再需要temp[i]了。只需使用FILE关闭它。

好吧,我想我已经解释了如何对你这么做,现在轮到你找出如何编码了(这是一个功课,对吧?如果你不尝试它就不会做作业为你自己;))

如果您仍然对此感到困惑,请尝试搜索它。我相信你有很多参考资料可以借鉴。

CMIIW:)