我有以下结构
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
我在这里做错了什么。
答案 0 :(得分:-3)
char* c = strtok(msg, " ");
这里应该有"\n"
。
编辑:可能你没有为arr
保留内存,但我们看不到。