我有一个声明如下的字符串数组:
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);
但它搞砸了很多东西(字符串被胡言乱语取代)并且仍然是分段的
答案 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])