将char *反序列化为C中的结构

时间:2015-11-24 16:45:38

标签: c arrays struct strtok

我有以下结构

typedef struct PATH{
    int server1;
    int server2;
    int weight;
}PATH;

这些存储在一个数组中。

我使用以下函数将数组序列化为字符串。

char* serialize(PATH** arr, int sz){

    char* buffer = calloc(50, sz * 64);
    buffer[0] = 0;

    char str[64];

    for (int i = 0; i < sz ; ++i)
    {
        sprintf(str, "\n%d %d %d\n", arr[i]->server1, arr[i]->server2, arr[i]->weight);
        strcat(buffer, str);
    }

    return buffer;
}

直到这里,代码工作正常。

现在我使用以下函数将字符串反序列化回结构并将其写回数组。

void deserialize(PATH** arr, char* msg){
    int idx = 0;
    char* c = strtok(msg, " ");
    while(c != NULL){
        PATH path;
        path.server1 = atoi(strtok(NULL, " "));
        path.server2 = atoi(strtok(NULL, " "));
        path.weight = atoi(strtok(NULL,"\n"));
        memcpy(arr[idx], &path, sizeof(path));
        idx++;
    }
    for (int i = 0; i < idx; ++i)
    {
        printf("%d %d %d\n", arr[i]->server1, arr[i]->server2, arr[i]->weight);
    }
    //do nothing for now
}

此函数调用会引发segmentation fault 我在这里做错了什么。

1 个答案:

答案 0 :(得分:-3)

char* c = strtok(msg, " ");

这里应该有"\n"

编辑:可能你没有为arr保留内存,但我们看不到。