2016-11-15 27 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

相關問題