c语言 printf 刷新,C语言中关于地址作返回值以及printf的缓冲刷新问题.doc

C语言中关于地址作返回值以及printf的缓冲刷新问题

程序源码:

#includechar * itoa(unsigned int count)

{

char s[32];

char *t;

char hex[] = "0123456789ABCDEF";

int i,j=0,length = 0;

char tmp;

t = s;

while(count){

i = count % 10;

s[j] = hex[i];

j++;

count = count /10;

}

s[j] = '\0';

while(*t){

t++;

length++;

}

t--;

for(i = 0 ;i < length /2;i++){

//printf("%c==%d==%c\n",s[i],i,*t);

tmp = s[i];

s[i] = *t;

*t = tmp;

t--;

}

t = s;

printf("%s\n%s\n",t,s);

return t;

}

int main()

{

unsigned int i = 12345;

char * sh = itoa(i);

printf("%s",sh);

}

以上代码是整形转化成字符型,不要问我为什么不用c库函数,因为我写的是裸机用的,不要问我为什么不申请堆,因为我写的是裸机用的。

好上述代码的思想上是没有问题的,就是通过不断除以10取余数进行赋值,然后进行字符串的倒序。最终完成了指针t或者s,返回,调用,打印。下面是结果:

意思是说调用之前可以打印,说明字符指针是创建对了,但是调用的时候出现乱码,于是笔者进行了各种常识。最终找到错误所在。

分析如下:子函数被调用的时候,在子函数的局部变量会在函数执行之后被销毁。所以返回值是没有的。所以不会打印东西。

但是为什么还能打印一部分呢?这就涉及到另一个问题:printf的缓冲刷新问题。看下面两个程序:

程序1:

Int main()

{

Printf(“aaa”);

While(1);

}

程序2:

Int main()

Printf(“aaa\n”);

While(1);

两个程序执行结果不同,第一个没有打印aaa,第二个打印了aaa

printf只有当缓冲区满了或者加上\n或者有输入的时候才会显示到屏幕上,所以以后在使用printf的时候要加上\n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值