printf("<tag1>%d</tag1>" "<tag2>%s</tag2>" "<tag3>%s</tag3>" "<tag4>%d</tag4>", int1, str2, str3, int4);
我尝试将该字符串snprintf到缓冲区(char []),然后将缓冲区的内容写入套接字,而不是打印到stdout.不幸的是,我想这里缓冲区在写入str2或str3时可能已满,可能甚至不足以包含任何一个字符串.
使用snprintf可以很容易地检查我是否能够将所有数据写入缓冲区,但是在将缓冲区内容发送到套接字后我不能继续停止.
基本上:如果格式化的字符串超过64个字节,是否有功能可以让我将“%d%s%s%d”的64字节发送到套接字?
如果此功能不存在,我对您建议的解决方法感兴趣(如果有帮助,您可以假设%s字段由一个试图溢出缓冲区的邪恶机器人填充,无论大小如何).
使用带有套接字描述符的fprintf怎么样?就像是:
int sockfd = socket(AF_INET, SOCK_STREAM, 0); FILE *fd = fdopen(sockfd, "w") fprintf(fd, "<tag1>%d</tag1>" "<tag2>%s</tag2>" "<tag3>%s</tag3>" "<tag4>%d</tag4>", int1, str2, str3, int4); fflush(fd);
精彩评论