gpt4 book ai didi

C - 字符串,va_list

转载 作者:太空宇宙 更新时间:2023-11-04 11:02:38 25 4
gpt4 key购买 nike

我已经(简单地)编写了这段代码。但它需要两次修复才能确定。

size_t send_header(int fd, int seconds, const char* header1, ...) {
char *buffer;
int count = 0;
const char * format = "%s";
const char *hdr = header1;
va_list vl, vl_count;
va_start(vl, header1);

va_copy(vl_count, vl);
while (hdr != NULL) {
hdr=va_arg(vl_count,const char*);
++count;
}
va_end(vl_count);
/* allocate storage for format string: */
buffer = (char*) malloc(strlen(format) * count + 1);
buffer[0] = '\0';
/* generate format string: */
for (; count > 0; --count) {
strcat(buffer, format);
}
/* print integers: */
printf(format, header1);
vprintf(buffer, vl);
va_end(vl);
if (BUFSIZ == 0) {
_myfunc_errorcode(ERROR);
return ERROR;
}
write(fd,buffer, strlen(buffer));
_myfunc_errorcode(SUCCESS);
return SUCCESS;
}

1 FIX)此代码第一次在控制台打印

HTTP/1.0 200 OK
Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Connection: close
Content-Type: text/html;charset=utf-8

第二次在控制台打印this

(null)HTTP/1.0 200 OK
Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Connection: close
Content-Type: text/html;charset=utf-8

哪里加(null),我不是很清楚。

2 FIX) fd,in write(), 是它在其他函数中使用的文件描述符,但我的浏览器只显示 %s%s%s ,为什么?

谢谢,问候

最佳答案

这是非常困惑的代码。

这个:

vprintf(buffer, vl);

不是对 vsprintf() 的调用,因此它不会将字符串格式化为 buffer,它只会使用 buffer 作为格式字符串,从 vl 读取参数,并打印到标准输出。

然而你还是不厌其烦地发送了buffer中的格式字符串,那一长串%ss,到fd。当然,您会在那里看到一堆 %s

我不明白为什么这段代码要经历所有的麻烦,只是为了构建一个充满重复 %s 代码的格式化字符串;与让 vprintf() 自己打印每个字符串相比,如此要简单得多......

此外,你泄漏了 buffer 内存,因为你从未 free() 它。

关于C - 字符串,va_list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26384310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com