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

时间:2015-01-13 17:40:14

标签: c pointers segmentation-fault

在那里我编写了这个测试代码,在第三次迭代时产生了一个分段错误...使用调试器我看到了令牌[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;

        }

print:string 打印:

跑完了;分段故障;实时:0ms;用户:0ms; system:0ms

2 个答案:

答案 0 :(得分:0)

好吧我解决了..这个问题就是我的想法...感谢@Joachim Pileborg的评论我试过这个(NULL)...非常感谢大家

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

            }`

答案 1 :(得分:-1)

当进程在最后一次迭代中执行strlen(tokens [count])时,会发生分段错误。返回值为0(无字符串?),而是seg fault ... 可能在那个位置没有字符串所以这发生了......我怎么能解决这个问题呢?无论如何这是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;

}