2016-07-02 71 views
0

所以即時獲取文件的字符串,我想標記每個字符串,每當我來到一個空白/換行符。我能夠將令牌分成分隔字符串,但我不能將它們複製到數組中。C編程數組高級別

int lexer(FILE* file){ 

char line[50]; 
char* delim; 
int i = 0; 
int* intptr = &i; 


while(fgets(line,sizeof(line),file)){ 
    printf("%s\n", line); 

    if(is_empty(line) == 1) 
     continue; 

    delim = strtok(line," "); 

    if(delim == NULL) 
     printf("%s\n", "ERROR"); 

    while(delim != NULL){ 

     if(delim[0] == '\n'){ 
     //rintf("%s\n", "olala"); 
      break; 
     } 
     tokenArray[*intptr] = delim; 
     printf("Token IN array: %s\n", tokenArray[*intptr]); 
     *intptr = *intptr + 1; 
     delim = strtok(NULL, " "); 

    } 

如果我運行此我得到的輸出:

令牌陣列:012

令牌陣列:23ddd

令牌陣列:vs32

令牌陣列:,344

令牌輸入數組:0sdf

根據我的文本文件這是正確的,但是當我嘗試在稍後的時間在相同的功能,出

*intptr = *intptr + 1; 
     delim = strtok(NULL, " "); 

    } 



} 
printf("%s\n", tokenArray[3]); 
fclose(file); 
return 0; 

轉載數組我沒有得到一個輸出,我試着寫的所有內容數組到一個txt文件,我有胡言亂語。我不知道該怎麼辦plz幫助

回答

1

首先,你對我的指針是無用的。爲什麼不直接使用我? 從現在開始我會假設。

然後,真正的問題:你必須分配和複製strtok每次返回的字符串,因爲strtok不會爲你分配令牌,它只是指向最後一個。序號都是一樣的,所以你最後一個空令牌

像這樣的幫助:

tokenArray[*intptr] = strdup(delim); 

(而不是tokenArray[*intptr] = delim;)注意,我用我更換了指數。之後,到i++

順便說一句我不會推薦使用strtok用於其他快速入侵的目的。這個函數有一個內存,所以如果你在你的程序的不同部分調用幾個函數,它可能會發生衝突(很久以前我犯了這個錯誤)。檢查strtok_r手冊在此情況下(R爲折返)

0
tokenArray[*intptr] = delim; 

在這一行,delim是指向其中的內容曾經在改變用於循環字符數組。所以在你的情況下,delim指向的內容應該被複製爲tokenArray[*intptr]的內容,即:

tokenArray[*intptr] = strdup(delim);