Je veux assembler une sorte d'en-tête HTTP (c'est juste un projet amusant). Mais mon problème est plus sur la façon de le faire en C. J'ai une fonction comme ceci:Assembler une chaîne c et la renvoyer par référence (en utilisant les fonctions malloc et string.h)
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");
}
Et quelque part principale que je veux faire une réponse comme ceci:
char *resp;
assembleResponse(&resp, 200, 500, "text/html");
printf("assembled response: %s", resp);
Mais je Il ne semble pas y avoir de problème :) Il semble y avoir beaucoup de problèmes sur la manière dont Im alloue les chaînes et insère du contenu dans celles-ci. J'arrive au drapeau "BB" mais plus loin je reçois:
malloc: *** error for object 0x104b10e88: incorrect checksum for freed object - object was probably modified after being freed.
Qu'est-ce que je fais mal et comment y remédier? Je suis familliar avec malloc
et C-comme des fonctions mais clairement pas un expert avec eux.
Merci!