在C中逐行反序列化字符串

时间:2015-11-25 04:15:42

标签: c

我通过UDP连接以下列格式收到字符串

1 2 7
1 3 5
1 4 6

我想反序列化此字符串并将其写入以下类型的结构数组

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

我正在使用以下功能来执行此操作。

void deserialize(RV** arr, char* msg){
    int idx = 0;
    char line[10];

    while (fgets(line, sizeof line, msg)){
        RV rv;
        rv.server1 = atoi(strtok(line, " "));
        rv.server2 = atoi(strtok(NULL, " "));
        rv.weight = atoi(strtok(NULL,"\n"));
        memcpy(arr[idx], &rv, sizeof(rv));
        idx++;
    }

}

当我尝试读取此数组时,我继续获得segmentation fault

1 个答案:

答案 0 :(得分:0)

  是的,我确实得到了一个警告,但是无法想出另一种阅读方法   一行一行。任何建议。

你可以改变

    while (fgets(line, sizeof line, msg)){

    int n;
    while (sscanf(msg, "%9[^\n]\n%n", line, &n) > 0)
    {
        msg += n;

这会降低\n,但我们无论如何也不需要它们。