2015-01-12 81 views
0

我有一個問題,我試圖初始化的一些全局字符指針數組變得充滿垃圾數據後,我初始化它們的函數超出了範圍。如何初始化char指針數組,以避免垃圾值?

char *dept_vals[255]; 
char *num_vals[255]; 
char *day_vals[255]; 
char *bldg_vals[255]; 
char *instr_vals[255]; 
int start_vals[255]; 
int end_vals[255]; 
int sect_vals[255]; 
int room_vals[255]; 

int idx; 

static int callback(void *NotUsed, int argc, char **argv, char **azColName) 
{ 
    int i = 0; 
    while(i < argc) 
    { 
     dept_vals[idx] = argv[i++]; 
     num_vals[idx] = argv[i++]; 
     start_vals[idx] = atoi(argv[i++]); 
     end_vals[idx] = atoi(argv[i++]); 
     day_vals[idx] = argv[i++]; 
     sect_vals[idx] = atoi(argv[i++]); 
     bldg_vals[idx] = argv[i++]; 
     room_vals[idx] = atoi(argv[i++]); 
     instr_vals[idx] = argv[i++]; 

     idx++; 

    } 
    return 0; 
} 

當我在不同的函數中打印值時,內容不正確。但是,我在同一個函數中初始化的整數數組中的值具有正確的值。我懷疑我初始化char指針數組的方式會導致意外的行爲,但我不完全確定在這種情況下初始化它們的正確方法是什麼。

+0

你把這個條件'我

+0

你是否在昨天包括'stdlib.h'我看到了一個這樣的問題。 –

+0

我明白你的意思是整數值是正確的,但char *結果不是。告訴我們你打印'char *'結果的方式。 –

回答

0

類似的代碼

dept_vals[idx] = argv[i++]; 

複製地址的argv [I]當您返回到dept_vals [IDX],但正如你指出,這超出範圍。要複製的實際字符串:

dept_vals[idx] = malloc(strlen(argv[i]) + 1); 
strcpy(dept_vals[idx], argv[i]); 
++i; 
+0

這工作。謝謝! – 36mbMonster

0

不知道如何調用函數,它只是猜測。

如果你使用gcc嘗試更換:

... = argv[i++]; 

... = argv[i] ?strdup(argv[i]) :NULL; ++i; 

,並與選項-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED使用編譯。

strdup()重複傳遞「string」。