我已经写了这段代码,但我不确定它是否正常。
size_t sendHeaders(int fd, int seconds, const char* header1, ...) {
size_t len = 0;
char *retbuf;
va_list args;
const char* hdr;
if (header1 == NULL)
common_setErrorCode(ERROR);
return ERROR;
len = strlen(header1);
va_start(args, header1);
while ((hdr=va_arg(args,char *))!=NULL)
len += strlen(hdr);
va_end(args);
retbuf = malloc(len + 1);
if (retbuf == NULL)
common_setErrorCode(ERROR);
return ERROR;
(void) strcpy(retbuf, header1);
va_start(args, header1);
while ((hdr=va_arg(args,char *))!= NULL)
(void) strcat(retbuf, hdr);
va_end(args);
char buffer[255] = { 0, };
vsprintf(buffer, hdr, args);
if (BUFSIZ == 0) {
common_setErrorCode(ERROR);
return ERROR;
}
write(fd, buffer, strlen(buffer));
common_setErrorCode(SUCCESS);
return SUCCESS;
}
但问题是vsprintf()不打印任何控件。我会知道代码是否正常(我个人认为没关系)。 问候
答案 0 :(得分:1)
当然vsprintf()
不会打印到控制台,这不是它的目的。它只是构建字符串,然后您必须自己写入控制台,如果这是您想要的。幸运的是你做到了。 :)问题可能是stdout
是行缓冲的,假设fd
是控制台。
此外,您需要检查I / O调用是否失败。
另外,正如Biffen所指出的,代码中只有一个return
,当然会退出该函数。
在调试器中单步执行该功能。