C printf的实现
有人能给我解释一下C printf的实现,c,string,printf,C,String,Printf,有人能给我解释一下printf的哪个实现正确地打印字符串吗 第1版: printf(const char * s) { while(*s != '\0') { write(s, 1, f); s++; } } 第2版: printf(const char *s) { write(s, strlen(s), f); } 两者都打印“正确的字符串”。它们甚至可以正确打印参数中的给定字符串 如果您的问题是什么是更好的实现,我建议
printf
的哪个实现正确地打印字符串吗
第1版:
printf(const char * s) {
while(*s != '\0') {
write(s, 1, f);
s++;
}
}
第2版:
printf(const char *s) {
write(s, strlen(s), f);
}
两者都打印“正确的字符串”。它们甚至可以正确打印参数中的给定字符串
如果您的问题是什么是更好的实现,我建议这在很大程度上取决于write的实现
如果写调用的开销足够大,或者可以在提交写操作之前缓冲所有字符,则选项1的速度较慢
如果写入非常未优化,则选项2的速度较慢。例如,它只是将一个字符一个字符地放到串行连接上。在这里,您需要使用strlen为字符串的额外迭代付费
请注意,write调用将文件描述符作为第一个参数,而不是最后一个参数。两者都正确打印“字符串”。它们甚至可以正确打印参数中的给定字符串
如果您的问题是什么是更好的实现,我建议这在很大程度上取决于write的实现
如果写调用的开销足够大,或者可以在提交写操作之前缓冲所有字符,则选项1的速度较慢
如果写入非常未优化,则选项2的速度较慢。例如,它只是将一个字符一个字符地放到串行连接上。在这里,您需要使用strlen为字符串的额外迭代付费
请注意,write调用将文件描述符作为第一个参数,而不是最后一个参数。是什么阻止了您自己进行测试?没有,因为您实现了puts而不是printf。printf的整个要点是打印格式化。您的代码没有进行任何格式化。除了前面的注释之外:从性能方面来说,版本2绝对是更好的选择。两个版本都做相同的事情。请定义“正确打印字符串”的含义?是什么阻止您自己进行测试?没有,因为您实现了puts而不是printf。printf的全部要点是打印格式化。您的代码没有进行任何格式化。除了前面的注释之外:从性能方面来说,版本2绝对是更好的选择。两个版本的功能相同。请定义“正确打印字符串”的含义?