2016-11-15 118 views
-1

的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]); 
} 
+2

'questions [i] =(char *)malloc(sizeof(char));'分配1个字节。似乎有点小。 – chux

+2

'sizeof(char)'是'1'。所以'fgets(问题[我],sizeof(char),fp);'持有一个字符(NUL终止符)。 'fgets'不能从文件读取。 – BLUEPIXY

+0

当给定一个字符缓冲区时,'fgets()'只能存储空终止符。您需要为每个字符串分配更多空间,或者将该行读入大字符串,然后复制('strdup()'而不是原始的'malloc()'是最简单的;您可以使用'realloc()',因为您已经做了'malloc()'为每个字符串)行存入字符串。 –

回答

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); 

免费(...)必须在这种情况下,相反的顺序。

+0

嘿! 谢谢你的回答! 它有帮助! :) 请问你,如果我不明白我所有句子的长度,那么'maxLengthOfString'应该是什么,以便能够存储我所有的句子,而不管它们的长度如何? – Noxter

+0

maxLengthOfString足够大。 – NeuroWhAI

+1

试过了。有用。我将你标记为解决方案。巨大的感谢快速和正确的答案!祝你今天愉快! – Noxter

相关问题