的malloc的创建数组我会很短什么的问题是:c - 从中文件中读取句子成字符串
我创建使用malloc字符串数组。 现在,我想将来自txt文件的句子放入这些字符串中。 我没有得到任何错误,但是当我想在“读入”后打印出字符串时,它只是空白,根本没有句子。
我链接了与此相关的程序的代码。
我在哪里犯了一个错误?
请帮忙。
谢谢!
编辑:我得到了问题。
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]);
}
'questions [i] =(char *)malloc(sizeof(char));'分配1个字节。似乎有点小。 – chux
'sizeof(char)'是'1'。所以'fgets(问题[我],sizeof(char),fp);'持有一个字符(NUL终止符)。 'fgets'不能从文件读取。 – BLUEPIXY
当给定一个字符缓冲区时,'fgets()'只能存储空终止符。您需要为每个字符串分配更多空间,或者将该行读入大字符串,然后复制('strdup()'而不是原始的'malloc()'是最简单的;您可以使用'realloc()',因为您已经做了'malloc()'为每个字符串)行存入字符串。 –