我正在尝试编写一个生成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)
哪一个更接近生成标题的"规范"方式?在第二种方法中,我需要释放内存,而在第一种方法中我不会,对吧?
谢谢
第一种方法更好,如果字符串不会改变或者某些字段被函数填充,那么第一种方法更容易实现,必须跟踪堆上分配的内存总是很困难,这是没有必要在你的情况下,你甚至可以使用宏,如
#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语句中绝对不需要括号,这使得代码难以阅读.
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |