sprintf()的问题

时间:2018-04-01 07:24:04

标签: c printing

int read_from(int client_index, struct sockname *usernames) {
    int fd = usernames[client_index].sock_fd;
    char buf[BUF_SIZE + 1];

    int num_read = read(fd, &buf, BUF_SIZE);
    buf[num_read] = '\0';
    /*
    if (num_read == 0){
        usernames[client_index].sock_fd = -1;
        return fd;
    }
    */
    char formattedOutput[BUF_SIZE * 2 + 2];
    sprintf(formattedOutput, "%s: %s", usernames[client_index].username, buf);
    for (int index = 0; index < MAX_CONNECTIONS; index++) {
        if (usernames[index].sock_fd != -1) {
            if (write(usernames[index].sock_fd, formattedOutput, strlen(formattedOutput)) != strlen(formattedOutput)){
                usernames[index].sock_fd = -1;
                return fd;
            }
        }
    }
    /*
    if (num_read == 0 || write(fd, formattedOutput, strlen(formattedOutput)) != strlen(formattedOutput)) {
        usernames[client_index].sock_fd = -1;
        return fd;
    }
    */

    return 0;
}

我不希望我的程序打印第二个%s。删除buf会导致我的程序因某些原因无法打印。我也尝试将buf本身的值更改为空字符串。

1 个答案:

答案 0 :(得分:0)

如果您希望第二个'%s'是可选的,则可以使用以下技术之一。假设 flag 是一个布尔值,决定是否打印buf。

public MyRepoUnitOfWork CreateUnitOfWork(object args = null)
{
    var scope = AsyncScopedLifestyle.BeginScope(_resolver);
    var uow = _resolver.GetInstance<MyRepoUnitOfWork>();
    uow.Scope = scope;
    return uow;
}

sprintf(formattedOutput, "%s: %s", usernames[client_index].username, flag ? buf : "");