我已经编写了这段代码,但我不确定是否可以。

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/

10-12 00:20