C - vsprintf,va_list

时间:2014-10-15 09:32:27

标签: c linux

我已经写了这段代码,但我不确定它是否正常。

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()不打印任何控件。我会知道代码是否正常(我个人认为没关系)。 问候

1 个答案:

答案 0 :(得分:1)

当然vsprintf()不会打印到控制台,这不是它的目的。它只是构建字符串,然后您必须自己写入控制台,如果这是您想要的。幸运的是你做到了。 :)问题可能是stdout是行缓冲的,假设fd是控制台。

此外,您需要检查I / O调用是否失败。

另外,正如Biffen所指出的,代码中只有一个return,当然会退出该函数。

在调试器中单步执行该功能。