2014-02-14 62 views
0

我有一個聲明這樣的字符串數組:準備字符串數組函數strlen

char *strs[MAX_STRINGS]; 

我逐步增加值的數組是這樣的:

char buffer [MAX_LENGTH]; 
buffer = someFunctionThatReturnsAStringPointer(); 
strs[i] = malloc(sizeof(buffer)+1); 
strcpy(strs[i],buffer); 

我需要通過數組值環當我到達一個沒有值的索引時停止,所以strlen應該可以工作,但是每當我點擊一個沒有設置的索引時它就會保持斷續:

while(strlen(strs[i])!=0) //segfaults when it gets to an unset index 

如何初始化strs數組,使其不會與strlen進行段錯誤?

我試圖memset(strs,0,MAX_STRINGS);,但它搞砸了很多東西(串用胡言亂語取代),仍然segfaulted

回答

1

也許ü可以設置所有的指針,以NULL最初

for (i = 0; i < MAX_STRINGS; i++) 
    strs[i] = NULL; 

,檢查

while (strs[i] != NULL) 

或只是

while (strs[i]) 
3

這是錯誤的:

char buffer [MAX_LENGTH]; 
buffer = someFunctionThatReturnsAStringPointer(); 

您應將其更改爲以下兩個選項(最好是第二個)一個。

選項#1:

char* buffer; 
buffer = someFunctionThatReturnsAStringPointer(); 

選項#2:

char buffer [MAX_LENGTH]; 
someFunctionThatCopiesIntoBuffer(buffer); 

至於你的問題,你可以使用memset(strs,0,MAX_STRINGS),或者乾脆迭代strs陣列,並設置每個條目爲0,但而不是測試strlen(strs[i])!=0,你應該測試strs[i]!=0