返回char*或使用memcpy?

Kar*_*Kar 1 c http

我正在尝试编写一个生成HTTP请求标头的函数.我现在有类似的东西

static char* genHeader() { 
    return("POST / HTTP/1.1\r\n\
            Host: www.example.com\r\n\
            Content-Type: application/x-www-form-urlencoded\r\n\r\n"); 
}
Run Code Online (Sandbox Code Playgroud)

我知道它也可以通过以下方式完成:

static void genHeader(char *header) { memcpy(header, ...); }
Run Code Online (Sandbox Code Playgroud)

哪一个更接近生成标题的"规范"方式?在第二种方法中,我需要释放内存,而在第一种方法中我不会,对吧?

谢谢

Iha*_*imi 5

第一种方法更好,如果字符串不会改变或者某些字段被函数填充,那么第一种方法更容易实现,必须跟踪堆上分配的内存总是很困难,这是没有必要在你的情况下,你甚至可以使用宏,如

#define HTTP_HEADER \
    "POST / HTTP/1.1\r\n" \
    "Host: www.example.com\r\n" \
    "Content-Type: application/x-www-form-urlencoded\r\n\r\n"
Run Code Online (Sandbox Code Playgroud)

而不是功能.

您需要动态生成标头的情况,例如因为Host更改,需要第二个解决方案,因为您需要为标头分配足够的空间,然后构建标头字符串.

在这种情况下,如果函数负责将指针返回到新分配的构建字符串会更好,但是,调用者应负责调用free().

此外,您的return语句中绝对不需要括号,这使得代码难以阅读.