stderr和stdout(printf、fprintf、sprintf)(转)
先區(qū)分一下:printf,sprintf,fprintf。
1,printf就是標(biāo)準(zhǔn)輸出,在屏幕上打印出一段字符串來(lái)。
2,sprintf就是把格式化的數(shù)據(jù)寫(xiě)入到某個(gè)字符串中。返回值字符串的長(zhǎng)度。
3,fprintf是用于文件操作。
??????原型:int?fprintf(FILE?*stream,char?*format,[argument]);???????
??????功能:fprintf()函數(shù)根據(jù)指定的format(格式)發(fā)送信息(參數(shù))到由stream(流)指定的文件.因此fprintf()可以使得信息輸出到指??定的文件。
1 例子: 2 ? char name[20] = "lucy";? 3 ?? FILE *out; 4 ??? out = fopen( "output.txt", "w" ); 5 ??? if( out != NULL ) 6 ??? fprintf( out, "Hello %s\n", name ); 7 ??? 返回值:若成功則返回輸出字符數(shù),若輸出出錯(cuò)則返回負(fù)值。?
?
stdout 與?stderr
stdout,?stdin,?stderr的中文名字分別是標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)錯(cuò)誤。
?
1,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤默認(rèn)都是將信息輸出到終端上,那么他們有什么區(qū)別呢?讓我們來(lái)看個(gè)題目:
問(wèn)題:下面程序的輸出是什么?(intel筆試2011)
1 int main(){ 2 fprintf(stdout,"Hello "); 3 fprintf(stderr,"World!"); 4 return0; 5 }輸出是
World!Hello
在默認(rèn)情況下,stdout是行緩沖的,他的輸出會(huì)放在一個(gè)buffer里面,只有到換行的時(shí)候,才會(huì)輸出到屏幕。而stderr是無(wú)緩沖的,會(huì)直接輸出,舉例來(lái)說(shuō)就是printf(stdout,?"xxxx")?和?printf(stdout,?"xxxx\n"),前者會(huì)憋住,直到遇到新行才會(huì)一起輸出。而printf(stderr,?"xxxxx"),不管有么有\(zhòng)n,都輸出。
2、 ?fprintf(stderr,?"Can't?open?it!\n");?
?fprintf(stdout,?"Can't?open?it!\n");?
?printf("Can't?open?it!\n");?
stdout?--?標(biāo)準(zhǔn)輸出設(shè)備?(printf(".."))?同?stdout。?
stderr?--?標(biāo)準(zhǔn)錯(cuò)誤輸出設(shè)備?
兩者默認(rèn)向屏幕輸出。?
但如果用轉(zhuǎn)向標(biāo)準(zhǔn)輸出到磁盤(pán)文件,則可看出兩者區(qū)別。stdout輸出到磁盤(pán)文件,stderr只能在屏幕。?
?
?
總結(jié)
以上是生活随笔為你收集整理的stderr和stdout(printf、fprintf、sprintf)(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: kali linux 清华源_Kali
- 下一篇: dnf会修改跨区服务器吗,dnf新跨区系