我正在制作一个业余内核,并尝试实现printf()
函数。
以下是我的实现:
void kprint(uint8_t *format, ...) {
va_list ap;
va_start(ap, format);
uint8_t *ptr;
for (ptr = format; *ptr != '\0'; ptr++) {
if (*ptr == '%') {
ptr++;
switch (*ptr) {
case 's':
puts(va_arg(ap, uint8_t *), 0x0F, xPos, yPos);
break;
}
} else {
puts(ptr, 0x0F, xPos, yPos);
ptr++;
}
}
va_end(ap);
}
当我使用这个函数打印“Hello World!”时,它返回以下内容:
"Hello %sllo %so %sWorld"
以下是函数调用:
kprint("Hello %s", "World");
puts
函数会打印字符串剩余部分。你需要使用putc(*ptr)
。 - Jean-François Fabreputs(va_arg(ap, uint8_t *), 0x0F, xPos, yPos);
这行代码是有问题的。它会让xpos
和ypos
的值保持不变,即错误的值。 - Jasen