在字符串数组上使用指针的分段错误

segmentation fault using pointers on array of strings

你好,我写了这个测试代码,它在 while 的第三次迭代中产生了一个分段错误...使用调试器我看到了 tokens[count] 的值,它是正确的,但在最后一次迭代中有一个分段故障, str_split 使用 ; 分割字符串作为除数(有效) 有人可以帮忙吗?

   sportello[0].elenco_ris[0]=strdup("string;of;test");
   tokens=str_split(sportello[0].elenco_ris[0],';');

   int p=0;
   int count=0;
   int lungh=strlen("");
        while(p!=-1){
            lungh=strlen(tokens[count]);
            if(lungh!=0){
                printf("\nprinto: %s",tokens[count]);
                count++;
            }
            else p=-1;

        }

打印:字符串 打印:

运行 完成;分段故障;实时:0ms;用户:0ms;系统:0ms

当进程在最后一次迭代中在 IF 内执行 strlen(tokens[count]) 时发生分段错误。return 值将是 0(没有字符串?)而是分段错误。 . 可能在那个位置没有字符串,所以发生这种情况...我该如何解决这个问题?无论如何,这是 str_split,与此站点某处发布的内容相同(或多或少),有效

char** str_split(char* a_str, char a_delim) {
char** result = 0;
size_t count = 0;
char* tmp = a_str;
char* last_comma = 0;
char delim[2];
delim[0] = a_delim;
delim[1] = 0;

/* Count how many elements will be extracted. */
while (*tmp) {
    if (a_delim == *tmp) {
        count++;
        last_comma = tmp;
    }
    tmp++;
}

/* Add space for trailing token. */
count += last_comma < (a_str + strlen(a_str) - 1);

/* Add space for terminating null string so caller
   knows where the list of returned strings ends. */
count++;

result = malloc(sizeof (char*) * count);

if (result) {
    size_t idx = 0;
    char* token = strtok(a_str, delim);

    while (token) {
        assert(idx < count);
        *(result + idx++) = strdup(token);
        token = strtok(0, delim);
    }
    assert(idx == count - 1);
    *(result + idx) = 0;
}

return result;

}

好的我解决了..问题就是我的想法...感谢@Joachim Pile Borg 的评论我已经尝试过这个(NULL)...所以感谢大家

`int p=0;
       int count=0;
            while(p!=-1){
                if (tokens[count] != NULL){
                    printf("\nprinto: %s",tokens[count]);
                    count++;
                }
                else p=-1;

            }`