我有一个可变传递在炭一个参数与printf的正确打印,但不与写入
char buffer[250] = "Your score is %d";
我打印它像
printf(buffer, 50);
当我使用
,其显示Your score is 50
write(connfg, buffer, 50);
将它打印到它显示的客户端%d
而不是50
如何使其显示与使用printf的服务器相同的消息?
我有一个可变传递在炭一个参数与printf的正确打印,但不与写入
char buffer[250] = "Your score is %d";
我打印它像
printf(buffer, 50);
当我使用
,其显示Your score is 50
write(connfg, buffer, 50);
将它打印到它显示的客户端%d
而不是50
如何使其显示与使用printf的服务器相同的消息?
使用的snprintf:
char buffer[250] = "Your score is %d" ;
char temp[sizeof(buffer)] ;
snprintf(temp , sizeof(temp) , buffer , 50) ;
printf("%s" , buffer) ;
,然后写缓冲区。
printf()
正常打印,因为它是一个包装函数上stdout
write()
不会打印值调用write因为只写无论在缓冲区中的文件/设备文件,
对于之前做的所有格式转换您的信息,调用write()
的第三个参数是要写入文件/设备文件的字节数。
'write'不做任何字符解释,ASCII或其他。 –
您还可以使用
#define SCORE "Your score is %d"
反正,我可以看到你分配大量内存的短消息。如果以后没有使用,你可以使用:
char buffer[] = "Your score is %d";
这就是为什么我说在你以前的帖子中查看'sprintf'。 –
如果您想将格式化的IO转换为文件描述符并且位于POSIX上,请使用['dprintf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/dprintf.html)。否则,你不能直接做; 'write'是一个低级的IO设施,所以你必须用'sprintf()'格式化你的字符串,然后用'write()'写入带格式的字符串。 –