我已经编写了这段代码,但我不确定是否可以。
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()不会打印任何内容到控制台。而且我想知道代码是否还可以(我个人认为还可以)。
问候
最佳答案
当然,vsprintf()
不会打印到控制台,这不是其目的。它只是构建字符串,如果需要的话,您必须自己将该字符串写入控制台。幸运的是,您做到了。 :)问题可能是stdout
是行缓冲的,假设fd
是控制台。
另外,您需要检查I / O调用是否不会失败。
同样,正如Biffen指出的那样,您的代码中只有一个return
,这时当然会退出该函数。
单步调试器中的功能。
关于c - C-vsprintf,va_list,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26379098/