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

Maj*_*ter 0 c string malloc http strcat

我想组装某种HTTP标头(它只是一个有趣的项目).但我的问题更多是关于如何在C中这样做.我有这样的功能:

void assembleResponse(char **response, const unsigned short code, const unsigned long length, const char *contentType)
{
    char *status;
    char *server = {"Server: httpdtest\r\n"};
    char *content = malloc(17 + strlen(contentType));
    char *connection = {"Connection: close"};

    printf("AA");

    strcpy(content, "Content-type: ");
    strcat(content, contentType);
    strcat(content, "\r\n");

    printf("BB");

    switch (code)
    {
    case 200:
       //200 Ok
       status = malloc(sizeof(char) * 18);
       //snprintf(status, 17, "HTTP/1.1 200 Ok\r\n");
       strcpy(status, "HTTP/1.1 200 Ok\r\n");
       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, "\r\n\r\n");

    printf("EE");
}
Run Code Online (Sandbox Code Playgroud)

在主要的某个地方我想做出这样的反应:

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

但我没有完全到达那里:)似乎在如何分配字符串和插入内容方面存在很多问题.我进入"BB"标志,但我得到了进一步:

malloc: *** error for object 0x104b10e88: incorrect checksum for freed object - object was probably modified after being freed.
Run Code Online (Sandbox Code Playgroud)

我做错了什么以及如何解决?我很喜欢malloc和类似C的功能,但显然不是他们的专家.

谢谢!

Ale*_*lex 5

问题似乎在这里:

response = malloc(sizeof(char) * (len + 5));
Run Code Online (Sandbox Code Playgroud)

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

你应该做:

*response = malloc(sizeof(char) * (len + 5));
Run Code Online (Sandbox Code Playgroud)

为了分配一个数组char.