-1

我有一个输入文件(txt),正好有两行,用\n.

例如:

FOO
BAR

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

我不知道如何使这项工作;你可以解释吗?

4

2 回答 2

2

如果要使用动态分配,则必须使用 char 指针分配 char 向量(char *, not 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 *buffer 中包含所有文本,您可以使用strtok来拆分它。

于 2012-04-16T12:51:35.520 回答
0

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

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

打开文件后,您在循环的帮助下读取数据(当然是),直到文件结束。在这里,我们得到了写成如下的条件:while(!feof(open)).

你得到了循环,现在你必须读取数据。要从文件中读取数据,您需要一个名为 的函数fscanf,该函数将从文件中读取数据。你像这样使用它:fscanf(open,"%s\n", temp[i]);; whileopen是您之前打开的文件的名称,"%s\n"表示您要读取一个字符串直到它到达\n,并且temp[i]是您存储数据的变量。

现在你已经有了数据,你不再需要FILE了。只需使用fclose(open).

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

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

CMIIW :)

于 2012-04-16T15:18:59.070 回答