的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()'爲每個字符串)行存入字符串。 –