组装一个c字符串并通过引用返回(使用malloc和string.h函数)



我想组装某种HTTP标头(这只是我正在做的一个有趣的项目(。但我的问题更多的是关于如何在C中做到这一点。我有一个这样的函数:

void assembleResponse(char **response, const unsigned short code, const unsigned long length, const char *contentType)
{
    char *status;
    char *server = {"Server: httpdtestrn"};
    char *content = malloc(17 + strlen(contentType));
    char *connection = {"Connection: close"};
    printf("AA");
    strcpy(content, "Content-type: ");
    strcat(content, contentType);
    strcat(content, "rn");
    printf("BB");
    switch (code)
    {
    case 200:
       //200 Ok
       status = malloc(sizeof(char) * 18);
       //snprintf(status, 17, "HTTP/1.1 200 Okrn");
       strcpy(status, "HTTP/1.1 200 Okrn");
       break;
    }
    printf("CC");
    unsigned int len = 0;
    len += strlen(status);
    len += strlen(server);
    len += strlen(content);
    len += strlen(connection);
    printf("DD");
    response = malloc(sizeof(char) * (len + 5));
    strcpy(*response, status);
    strcat(*response, server);
    strcat(*response, content);
    strcat(*response, connection);
    strcat(*response, "rnrn");
    printf("EE");
}

总的来说,我想做出这样的回应:

char *resp;
assembleResponse(&resp, 200, 500, "text/html");
printf("assembled response: %s", resp);

但我不太明白:(在如何分配字符串和插入内容方面似乎有很多问题。我到达了"BB"标志,但更进一步,我得到了:

malloc: *** error for object 0x104b10e88: incorrect checksum for freed object - object was probably modified after being freed.

我做错了什么?如何解决?我熟悉malloc和类C函数,但显然不是它们的专家。

谢谢!

问题似乎就在这里:

response = malloc(sizeof(char) * (len + 5));

在这种情况下,您正在分配一个大小不正确的char*数组。

你应该做:

*response = malloc(sizeof(char) * (len + 5));

以便分配CCD_ 3的阵列。

相关内容

  • 没有找到相关文章

最新更新