有人可以向我解释printf
的哪个实现正确打印字符串?
版本1:
printf(const char * s) {
while(*s != '\0') {
write(s, 1, f);
s++;
}
}
版本2:
printf(const char *s) {
write(s, strlen(s), f);
}
答案 0 :(得分:3)
两者都打印“正确的字符串”。他们甚至可以正确地在参数中打印给定的字符串。
如果你的问题是什么是更好的实现,我建议这很大程度上取决于写的实现。
如果写入调用具有足够大的开销,或者在提交写入之前可以缓冲所有字符,则选项1会更慢。
如果写入非常不优化,则选项2会更慢。例如,它只是逐个字符地放在串行连接上。在这里,您需要为strlen支付额外的字符串迭代次数。
请注意,write调用将文件描述符作为第一个参数,而不是最后一个。