天天看點

keil C51:printf sprintf vprintf vsprintf 函數學習

在keil安裝目錄,其中有STDIO.H 其中有幾個print函數如下:

extern int printf   (const char *, ...);
extern int sprintf  (char *, const char *, ...);
extern int vprintf  (const char *, char *);
extern int vsprintf (char *, const char *, char *);
           

vprintf對應printf,将資料以ascii碼的形式列印到序列槽

vsprintf 對應sprintf,将資料以ascii碼的形式列印到buffer中。

The sprintf function formats a series of strings and numeric values and stores the resulting string in buffer. 

This function is similar to the printf routine, but it stores the formatted output in buffer rather than sending it to the output stream.

printf的原理是從 “字元指針變量”(單位元組指針)開始從序列槽發送出,如果遇到‘\0’(0x00)就停止發送,注意這個0x00是不會發送的!

buffer[0]=0x00;
buffer[2]=0x00;		//	buffer[2]=0x01; 
TI = 1;
ES = 0;
printf(buffer);
ES = 1;	
           

這樣子是不會發送任何資料的,因為buffer指向的第一個位元組的資料是0x00,那麼就不會發送資料!

但是如果buffer[0]是一個非0x00的資料,那麼就可以送,但是buffer[1]預設沒有初始化,是以隻發送第一個資料。

是以如果要發送一個數組,其中包括0x00,那麼就不能用printf函數。要用一個for循環來發送資料周遊整個數組。