2012-11-13 53 views
2

我一直希望能夠幫助我使用一些輸入和2維數組來處理我爲某個任務編寫的程序的方法。編程語言是CI得到了一些輸入參數:函數的2d char數組的輸出參數

FILE * IFP =輸入文件指針,主打開了,打開一個txt文件,每行

字符的字符串3的格式** firstTokens,middleTokens = 2維字符數組,我希望他們在每個字符串的末尾(如逗號和句點)保留前兩個字符串減去預期的標點符號。計劃成爲輸出參數。

char * lastLetter =任何字符串的第一個字母在txt文件中每行的最後一列中。計劃成爲輸出參數。

INT numberOfLines =我期待從文本文件中讀取行數

這是我的主要函數調用的方法:

readLine(ifp, firstTokens, middleTokens, lastLetter, numberOfLines); 

我想我的問題是正確獲取firstTokensmiddleTokens,因爲我在編輯過程中總是收到編譯器錯誤和分段錯誤。一些幫助/澄清錯誤將不勝感激。

void readLine(FILE * ifp, char ** firstTokens, char ** middleTokens, char* lastLetter, int numberOfLines) 
{ 
    char* tempFirst; 
    char* tempMiddle; 
    char* tempLast; 
    char delim[4]; 
    delim[0] = '.'; 
    delim[1] = '\0'; 
    delim[2] = '\n'; 
    delim[3] = ','; 
    int i; 

    for(i = 0; i < numberOfLines; i++) 
    { 
     fscanf(ifp, "%s %s %s", tempFirst, tempMiddle, tempLast); 
     *firstTokens[i] = strtok(tempFirst, delim); 
     *middleTokens[i] = strtok(tempMiddle, delim); 
     lastLetter[i] = tempLast[0]; 
    } 
} 
+0

char ** firstTokens被稱爲指針(在你的情況下)char的指針。除非你爲它分配內存,否則期望未定義的行爲。 – farmdve

+0

沒有內存分配給'fscanf()'的目標。 – hmjd

+0

不幸的是'strtok'不能在''\ 0''字符上標記。它想要一個合適的C字符串作爲它的最後一個參數,這意味着它在該字符上結束。所以你只能在這個字符上加上標記。 –

回答

1

你需要爲tempFirsttempMiddletempLast分配存儲空間。 fscanf寫入這些指針,假設你已經提供了足夠的內存。

#define MAX_NAME_LEN (20) /* change this as required */ 
... 
char tempFirst[MAX_NAME_LEN]; 
char tempMiddle[MAX_NAME_LEN]; 
char tempLast[MAX_NAME_LEN]; 
... 
fscanf(ifp, "%s %s %s", tempFirst, tempMiddle, tempLast); 
+0

所以我爲它分配了適當的內存,現在編譯。彈出另一個問題:如果我要爲(i = 0; i user1820560

+0

如果你使用'firstTokens被分配[i] = strtok的(...'?即不提領'firstTokens [I]' – simonc

+0

所以我分配適當的內存爲它,現在它編譯彈出另一個問題:如果我打電話打印語句,例如: ' (i = 0; i user1820560