2014-02-14 41 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