該分配是從文本文件讀取單詞,然後將它們反向打印到另一個文本文件。我在將讀入的單詞放入數組中時遇到問題。我不應該分配更多的內存來保存每個字符串,所以我能想到的唯一解決方案是將每個單詞放在tempString中,測量它的長度,然後分配足夠的內存來保存它並移動到下一個單詞。我的困惑是爲什麼每次迭代都會改變數組中的每個單詞。我希望最後一行是五四四。將文件中的字符串分配給字符串數組遇到困難
我也認爲我的方法是馬虎,因爲具有比tempString的長度更長的字符串會導致一個問題,但我無法想出解決方案。
這是我的代碼。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
*
*/
char** readWords(int* nPtr);
int main() {
int numWords = 0;
readWords(&numWords);
return 0;
}
char** readWords(int* nPtr){
int i = 0;
int listIndex = 0;
char tempChar = 0;
char** stringArray = NULL;
char tempString[50] = {};
FILE *inputfile=fopen("inputfile.txt","r");
fscanf(inputfile,"%d\n",nPtr); //Makes numWords = integer on first line
stringArray = calloc(*nPtr, sizeof(char*));
for(i=0;i<*nPtr;i++){
fscanf(inputfile,"%s", tempString);
stringArray[*nPtr-1-i] = calloc(strlen(tempString)+1, sizeof(char));
stringArray[*nPtr-1-i] = tempString;
printf("tempString: %s\n",tempString);
printf("stringArray index: %d\n",*nPtr-1-i);
printf("stringArray: %s%s%s%s%s\n",stringArray[0],stringArray[1],stringArray[2],stringArray[3],stringArray[4]);
}
fclose(inputfile);
}
這是我的輸出
tempString: one
stringArray index: 4
stringArray: (null)(null)(null)(null)one
tempString: two
stringArray index: 3
stringArray: (null)(null)(null)twotwo
tempString: three
stringArray index: 2
stringArray: (null)(null)threethreethree
tempString: four
stringArray index: 1
stringArray: (null)fourfourfourfour
tempString: five
stringArray index: 0
stringArray: fivefivefivefivefive
RUN SUCCESSFUL (total time: 64ms)
這是我的輸入文件
5
one
two
three
four
five
建議是非常讚賞
您忘記將臨時字符串複製到您爲數組分配的空間中。 – michaelmeyer 2014-10-11 04:54:53
這段代碼有許多錯誤。最可怕的是你每次看到'ptr = some-allocation-function(...);'後面跟着'ptr =別的東西;'你只是(a)複製一個地址;不是一塊內存,和(b)在兩條短行內泄漏內存(只比記錄多一個內存;一個沒有分配的空白'malloc')。快速修復是一個'strcpy'而不是一個任務,但是這個代碼真的需要更多的幫助。 – WhozCraig 2014-10-11 05:03:02
謝謝,我用strcpy,它現在可以工作。我沒有完全想到字符串是c中的指針而不是數據類型。你介意在我的代碼中列出其他一些錯誤的東西嗎? (b)我不知道你的意思。不calloc初始化內存爲空?你沒有分配什麼意思。我對動態內存分配很陌生。 – Esoremada 2014-10-11 05:24:31