我正在尝试用简单的工具编写自己的 printf。
这是 printf.c 的代码:
#include "printf.h"
uint8 pos_x=0, pos_y=0;
void printf(char str[]){
int i=0;
while(str[i]!='\0'){
switch(str[i]){
case '\t':{
uint8 k=0;
while(k<TAB_WIDTH){
putCh(' ');
++k;
}
}
case '\n':newLn();
default:putCh(str[i]);
}
++i;
}
}
void putCh(char ch){
char *p=(char*)(VIDEO_MEM+2*(RES_X*pos_y + pos_x));
asm(" xchg %bx, %bx");
*p++=ch;
*p++=ATTRIBUTE;
++pos_x;
}
void newLn(){
pos_x=0;
++pos_y;
}
因此,如果我使用上面的代码,则没有任何效果,但如果我使用此 *((int*)0xb8000)=0x07690748;
则效果很好。
那么,我的指针有什么问题呢?谢谢!
附注所有定义都在 printf.h
中;函数调用 form main 如下:
char str[]="Hello!\n";
printf(str);
编辑1:环境:
gcc 4.8.2 built for i586
Bochs 2.6.2
No OS
编辑2:printf.h
#ifndef _PRINF_F_
#define _PRINT_F_
#include "types.h"
#define VIDEO_MEM 0xb8000
#define RES_X 80
#define RES_Y 25
#define ATTRIBUTE 0x7
#define TAB_WIDTH 4
void printf(char[]);
void putCh(char);
void newLn();
#endif
最佳答案
查找 switch 语句的语法 - 特别是 BREAK
关于c - 低级 printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21352674/