2014-10-02 69 views
0

我想把一個文件的所有行放在char **中。 我的功能很簡單: 唯一的參數是一個指向char數組的指針,它包含文件。 我首先計算行數來分配我的char **。 一旦分配,我使用strtok_r來解析文件。然後Segfault。 我想知道是否有可能以這種方式做到這一點?獲取一個字符數組和段錯誤的所有行

char **getlines(char *file) 
{ 
    int i = 0; 
    int nblines = 0; 
    while (file[i] != '\0') 
    { 
    if (file[i] == '\n') 
     nblines++; 
    i++; 
    } 
    char **array = malloc(sizeof(char*) * nblines); 
    char *saveptr; 
    if (nblines == 0) 
    return NULL; 
    int a = 0; 
    char *c = strtok_r(file, "\n", &saveptr); 
    while (c) 
    { 
    array[a] = strtok_r(NULL, "\n", &saveptr); 
    a++; 
    } 
    return array; 
} 
+0

這個問題應該關閉,因爲OP會不斷改變問題,並且它不再有意義。 – 2014-10-02 10:51:19

回答

1

應該是:

char **array = malloc(sizeof(char*) * nblines); 

它分配一個指針數組你行。

當你實際上有一個char*字符串時,說一個file是令人困惑的。

然後你的while(c)循環沒有結束,因爲你沒有更新c。我把這些留給你解決。

此外,你有一個內存泄漏return NULL;。將該檢查放在arraymalloc()以上。

當然,您需要strtok()的可重入版本嗎?

相關問題