我有一个包含以下结构的数组
typedef struct PATH{
int server1;
int server2;
int weight;
}PATH;
我正在使用以下函数将其序列化为字符串。
char* serialize(PATH** arr, int sz){
char* buffer = calloc(50, sizeof(int));
char* str = NULL;
for (int i = 0; i < sz ; ++i)
{
sprintf(str, "%d %d %d\n", arr[i]->server1, arr[i]->server2, arr[i]->weight);
strcat(buffer, str);
}
return buffer;
}
然后尝试使用以下两行代码在 main 中打印它。
char* msg = serialize(paths, vector->numEdges);
printf("%s\n", msg);
我最终遇到了段错误。
最佳答案
char* str = NULL;
for (int i = 0; i < sz ; ++i)
{
sprintf(str, "%d %d %d\n", arr[i]->server1, arr[i]->server2, arr[i]->weight);
strcat(buffer, str);
当您调用 sprintf
时,您要求它将结果存储在 str
中,但是 str
没有指向任何东西。
还有:
char* buffer = calloc(50, sizeof(int));
当缓冲区存储文本数字而不是整数时,为什么要使用 sizeof(int)
?
你可能想要这样的东西:
char* serialize(PATH** arr, int sz){
char* buffer = malloc(sz * 50);
buffer[0] = 0;
char str[64];
for (int i = 0; i < sz ; ++i)
{
sprintf(str, "%d %d %d\n", arr[i]->server1, arr[i]->server2, arr[i]->weight);
strcat(buffer, str);
}
return buffer;
}
关于c - C中的序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33837694/