C - 从文件读取句子到malloc创建的字符串数组

时间:2016-11-15 14:21:20

标签: c arrays string file malloc

我将简短地解决问题所在:

我使用malloc创建了一个字符串数组。 现在,我想将txt文件中的句子放入这些字符串中。 我没有收到任何错误,但是当我想在" read-in"之后打印出字符串时,它只是空白,根本没有句子。

我链接与此相关的程序代码。

我在哪里弄错了?

请帮忙。

谢谢!

编辑:我遇到了问题。

questions[i]=(char*) malloc(sizeof(char));

仅分配1个字节。 现在的问题如下:我应该如何分配更多的字节呢? 这些问题[i]应该是长的'老师说,作为其中的句子,但我不知道如何做到这一点。

char** questions
int numbofquestions=40;

questions=(char**) malloc(sizeof(char*)*numbofquestions);
int i;
for(i=0;i<numbofquestions;i++)
{
 questions[i]=(char*) malloc(sizeof(char));
}

FILE* fp;
fp=fopen("sentences.txt", "r");
for(i=0;i<4;i++) // LESS THAN 4 BECAUSE IT IS JUST A TEST, THERE IS ONLY 4 SENTENCES IN THE FILE AT THE MOMENT. EACH SENTENCE IS IN A DIFFERENT ROW.
{
 fgets(questions[i],sizeof(char),fp);
 printf("%s\n", questions[i]);
}
fclose(fp);

free(questions);
for(i=0;i<numbofquestions;i++)
{
 free(questions[i]);
}

1 个答案:

答案 0 :(得分:2)

有三个错误。

malloc(sizeof(char))

fgets(questions[i],sizeof(char),fp);

的序列
free(...)


[1]:

int maxLengthOfString = 128; // or more.
...
(char*) malloc(sizeof(char) * maxLengthOfString);

,因为

sizeof(char) // == just 1 byte == 1 character == only '\0' in string.


[2]:

fgets(questions[i], sizeof(char) * maxLengthOfString, fp);
与[1]相同的原因。


[3]:

for(i=0; i<numbofquestions; i++)
{
    free(questions[i]);
}
free(questions);
在这种情况下,

free(...)必须按相反的顺序排列。