我有一个输入文件(txt),正好有两行,用\n
.
例如:
FOO
BAR
现在我必须将第一行(在我的示例中为 FOO)放入 a 中char **a
,将第二行(BAR)放入char **b
.
我不知道如何使这项工作;你可以解释吗?
如果要使用动态分配,则必须使用 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来拆分它。
我不知道为什么那里有两个双指针,我认为这是没有必要的。
要从中读取文件.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 :)