c - C中的序列化错误

标签 c

我有一个包含以下结构的数组

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/

相关文章:

c - C语言中如何去除字符串末尾多次重复的重复字符?

php - 为什么不使用C语言进行Web开发

C语言计算时间

c - 如何在 C 中用字符填充二维数组?

C 释放动态分配的结构数组

c - 从c中的数组中删除偶数

c - 我需要将分散-聚集 DMA 链表放入不可缓存的内存中吗?

c - parent 不创造 child ?

c - 如何将开罗灰度表面写入PNG

c - 使用其他函数释放 C 内存时遇到问题