<分区>
谁能给我解释一下 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 的字符串的额外迭代付费。
请注意,写入调用将文件描述符作为第一个参数,而不是最后一个。
关于c - printf的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35061471/