我将简短地解决问题所在:
我使用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]);
}
答案 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(...)必须按相反的顺序排列。