strlen的prep字符串数组

时间:2014-02-14 09:42:08

标签: c arrays

我有一个声明如下的字符串数组:

char *strs[MAX_STRINGS];

我将增量值逐渐添加到数组中:

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

我需要循环遍历已添加的数组值,当我到达没有值的索引时停止,因此strlen应该可以工作,但每当我点击尚未设置的索引时它就会保持segfaulting:

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

如何初始化strs数组,使其不会与strlen一起发生段错误?

我试过了memset(strs,0,MAX_STRINGS);但它搞砸了很多东西(字符串被胡言乱语取代)并且仍然是分段的

2 个答案:

答案 0 :(得分: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,而应测试{{1} }}

答案 1 :(得分:1)

您可以将所有指针初始设置为NULL

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

并检查

while (strs[i] != NULL) 

或只是

while (strs[i])