我有一个输入文件(txt),其中只有两行,以\n
分隔。
例如:
FOO
BAR
现在我必须将第一行(在我的示例中为FOO)放在char **a
中,将第二行(BAR)放在char **b
中。
我不知道如何做这项工作;你能解释一下吗?
答案 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:)