我想组装某种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的阵列。