日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ char*转string_CC++|输入输出与内存、缓存、设备文件

發布時間:2024/10/8 c/c++ 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ char*转string_CC++|输入输出与内存、缓存、设备文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通常,輸入輸出的主體是內存,輸入是指輸入到內存變量(變量存儲在內存中),輸出是指從內存變量輸出。

另外,輸入輸出通常是指設備文件與內存的交互。設備文件可以是鍵盤、顯示器等標準設備文件,也可以是磁盤文件,甚至另一塊內存。

還有,設備文件與內存的交互,通常因為效率的考量,并不是直接的交互,通常以緩存(也是一塊內存)為中介。

也可以描述為:

1 printf()與scanf()

double db;

scanf("%lf",&db);

printf("output:%f",db);

fflush(stdin); // 將回車符丟棄掉

char str[50];

scanf("%[^]",str);/*scanf("%s",string);不能接收空格符*/

printf("%s",str);

2 fprintf()與fscanf()

前面的f是指file指針,后面的f是指format。

相對于printf()與scanf(),多出來的參數是一個FILE指針:

int fscanf(FILE * stream, const char * format, [argument...]);int fprintf( FILE *stream, const char *format, [ argument ]...)

也可以使用標準文件指針:

fscanf(stdin,"format",char[]);fprintf(stdout,"format",char[]);

直接等同于

scanf("format",varlist);printf("format",varlist);

實例:

#include #include int main(void){ FILE *out,*fp; fp = fopen("fp.txt","w+"); if(fp == NULL) return 1;fprintf(fp, "input file the %dst.",1);fprintf(fp, "input file the %dnd.",2);fflush(fp);fclose(fp); char str[66];fp = fopen("fp.txt","r");fscanf(fp,"%s",str);fclose(fp);fprintf(stdout,"%s",str); //等同printf("%s",str); out = fopen("out.txt", "w+"); if(out == NULL) return 1; fprintf(out, "%s",str); //while(!feof(in)) //fputc(fgetc(in), out); fclose(out);system("type out.txt");system("pause"); return 0;}

3 sscanf()與ssprintf()

前面的s表示一個string指針。

相對于printf()與scanf(),多出來的參數是一個string指針,對應一塊內存(其數據流動是:內存→另一塊內存),用于字符串格式化或轉換:

int sscanf(const char *buffer ,const char *format, [ argument ] ... );

相當于將buffer按format拆解為一個個的argument。

int sprintf(char *string, char *format [,argument,...]);

相當于將一個個的argument按format裝配成一個string。

實例:

#include int main( void ) { char tokenstring[] = "15 12 14..."; char s[81]; char c; int i; float fp; sscanf( tokenstring, "%80s", s ); sscanf( tokenstring, "%c", &c ); sscanf( tokenstring, "%d", &i ); sscanf( tokenstring, "%f", &fp ); char str[222]; sprintf(str,"%s%c%d%f",s,c,i,fp); printf( "%s", str); getchar(); } // 1511515.000000

4 va_list參數列表的輸入輸出

以前函數名前面如果再增加一個字符"v",表示va_lsit。

如vscanf、vfscanf()、vsscanf()。

vsscanf()與sscanf()類似,但該函數用一個va_list類型形參列表代替變量參數列表。

#include #include //模擬實現系統提供的printf函數int vpf(char* fmt,...){va_list argptr;int cnt;va_start(argptr,fmt);// 第一個參數為指向可變參數字符指針的變量, // 第二個參數是可變參數的第一個參數,通常用于指定可變參數列表中參數的個數cnt=vprintf(fmt,argptr);va_end(argptr);//將存放可變參數字符串的變量清空return(cnt);}int main(){int inumber=30;float fnumber=90.0;char* string="abc";vpf("%d%f%s",inumber,fnumber,string);getchar();return 0;}//3090.000000abc

5 綜合比較

printf()、scanf() : 其f表示format,兩個參數,隱含stdout或stdin

fprintf()、fscanf() : 前面的f表示File*,也是增加的參數

sscanf()、ssprintf() : 前面的s表示string,一個char*,也是增加的參數

vsscanf()、vssprintf() : 前面的v表示va_list,參數列表使用va_list

數據傳輸的方向是:

6 IO函數之間的相應關系

-End-

總結

以上是生活随笔為你收集整理的c++ char*转string_CC++|输入输出与内存、缓存、设备文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。