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
本身的值更改为空字符串。
答案 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 : "");