【发布时间】:2010-01-23 13:38:30
【问题描述】:
我只想写到 1 行:
fprintf(stdout, "RCPT TO: <%s>\r\n", argv[argc-1]);
fprintf(sockfd, "RCPT TO: <%s>\r\n", argv[argc-1]);
所以我想将相同的字符串发送到标准输出和我打开的套接字。我该怎么做?
【问题讨论】:
我只想写到 1 行:
fprintf(stdout, "RCPT TO: <%s>\r\n", argv[argc-1]);
fprintf(sockfd, "RCPT TO: <%s>\r\n", argv[argc-1]);
所以我想将相同的字符串发送到标准输出和我打开的套接字。我该怎么做?
【问题讨论】:
有
#include <stdarg.h>
int fprintf_both(FILE *a, FILE *b, const char *fmt, ...)
{
FILE *f[2];
const int n = sizeof(f) / sizeof(f[0]);
int i;
int sum = 0;
f[0] = a;
f[1] = b;
for (i = 0; i < n; i++) {
va_list ap;
int bytes;
va_start(ap, fmt);
bytes = vfprintf(f[i], fmt, ap);
va_end(ap);
if (bytes < 0)
return bytes;
else
sum += bytes;
}
return sum;
}
你可以
fprintf_both(stdout, sockfd, "RCPT TO: <%s>\r\n", argv[argc-1]);
【讨论】:
除非您想编写自己的函数,该函数需要两个 File* 和 varargs,并调用 fprintf 两次。
【讨论】:
我猜你想这样做是为了把它放在类似 while 循环条件的东西中?您可能喜欢 C 逗号运算符,例如
while ( f1(), f2() ) { //bla }
逗号导致 f1() 被执行,它的返回值被丢弃,然后是 f2() 并保留它的返回值。 (即 f2() 应该返回一个 int 或 bool 而 f1() 无关紧要)
【讨论】: