2013-11-21 28 views
0

我有一个可变传递在炭一个参数与printf的正确打印,但不与写入

char buffer[250] = "Your score is %d"; 

我打印它像

printf(buffer, 50); 

当我使用

,其显示 Your score is 50

write(connfg, buffer, 50); 

将它打印到它显示的客户端%d而不是50

如何使其显示与使用printf的服务器相同的消息?

+1

这就是为什么我说在你以前的帖子中查看'sprintf'。 –

+0

如果您想将格式化的IO转换为文件描述符并且位于POSIX上,请使用['dprintf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/dprintf.html)。否则,你不能直接做; 'write'是一个低级的IO设施,所以你必须用'sprintf()'格式化你的字符串,然后用'write()'写入带格式的字符串。 –

回答

1

使用的snprintf:

char buffer[250] = "Your score is %d" ; 
char temp[sizeof(buffer)] ; 
snprintf(temp , sizeof(temp) , buffer , 50) ; 

printf("%s" , buffer) ; 

,然后写缓冲区。

1

printf()正常打印,因为它是一个包装函数上stdout

write()不会打印值调用write因为只写无论在缓冲区中的文件/设备文件,

对于之前做的所有格式转换您的信息,调用write()的第三个参数是要写入文件/设备文件的字节数。

+0

'write'不做任何字符解释,ASCII或其他。 –

0

您还可以使用

#define SCORE "Your score is %d" 

反正,我可以看到你分配大量内存的短消息。如果以后没有使用,你可以使用:

char buffer[] = "Your score is %d";