2013-11-21 101 views
0

這解析爲char數組,我想通過解析:麻煩通過字符數組用C

array1 word 2, 3, 4, 5, 6, 7 

現在我已經寫了下面的代碼,試圖做到這一點:

char* variableName = strtok(currentLine, " "); // array1 

    strtok(NULL, " "); // skip the 'word' token 
    char arrayOfElements[256]; // 256 = maximum line size 

    char* currentElement = strtok(NULL, " "); // currentElement = "2," 
    strcpy(arrayOfElements, currentElement); // arrayOfElements = "2," 

    int numberOfArrayElements = 1; 

    while (currentElement != NULL) { // <== I think it's a inifinite loop becuase of this condition but I don't know how to fix this condition 
     currentElement = strtok(NULL, " "); // = "3," on first pass 
     strcat(arrayOfElements, " "); // = "3, " on first pass 
     strcat(arrayOfElements, currentElement); // arrayOfElements = "2, 3," on first pass 
     numberOfArrayElements++; 
    } 

我的最終目標是我想要arrayOfElements = 2,3,4,5,6,7

+1

如果第二個strok()返回NULL,該怎麼辦?您正在愉快地將可能爲NULL的字符串strcpying到arrayOfElements中。實際上,在strcpy()或strcat()完成後,您測試它是否爲NULL。你應該先詢問,稍後再拍(訪問字符串)。 –

+0

您是否試圖製作沒有前導''單詞''字符串的另一個字符串,或者您是否嘗試從原始字符串中創建一個整數數組? – DevNull

+0

最後我想arrayOfElements = 2,3,4,5,6,7 –

回答

0

重新排序代碼,以便在嘗試使用指針之前進行測試。另外,需要初始化arrayOfElements

char* variableName = strtok(currentLine, " "); // array1 

strtok(NULL, " "); // skip the 'word' token 
char arrayOfElements[256]; // 256 = maximum line size 

char* currentElement = strtok(NULL, " "); // currentElement = "2," 
int numberOfArrayElements = 0; 
arrayOfElements[0]='\0'; // initialize the array to an empty string. 

while (currentElement != NULL) { 
    if (numberOfArrayElements > 0) 
     strcat(arrayOfElements, " "); 
    strcat(arrayOfElements, currentElement); 
    numberOfArrayElements++; 
    currentElement = strtok(NULL, " "); 
}