c++ char*转string_CC++|输入输出与内存、缓存、设备文件
通常,輸入輸出的主體是內(nèi)存,輸入是指輸入到內(nèi)存變量(變量存儲(chǔ)在內(nèi)存中),輸出是指從內(nèi)存變量輸出。
另外,輸入輸出通常是指設(shè)備文件與內(nèi)存的交互。設(shè)備文件可以是鍵盤、顯示器等標(biāo)準(zhǔn)設(shè)備文件,也可以是磁盤文件,甚至另一塊內(nèi)存。
還有,設(shè)備文件與內(nèi)存的交互,通常因?yàn)樾实目剂?#xff0c;并不是直接的交互,通常以緩存(也是一塊內(nèi)存)為中介。
也可以描述為:
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。
相對(duì)于printf()與scanf(),多出來的參數(shù)是一個(gè)FILE指針:
int fscanf(FILE * stream, const char * format, [argument...]);int fprintf( FILE *stream, const char *format, [ argument ]...)也可以使用標(biāo)準(zhǔn)文件指針:
fscanf(stdin,"format",char[]);fprintf(stdout,"format",char[]);直接等同于
scanf("format",varlist);printf("format",varlist);實(shí)例:
#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表示一個(gè)string指針。
相對(duì)于printf()與scanf(),多出來的參數(shù)是一個(gè)string指針,對(duì)應(yīng)一塊內(nèi)存(其數(shù)據(jù)流動(dòng)是:內(nèi)存→另一塊內(nèi)存),用于字符串格式化或轉(zhuǎn)換:
int sscanf(const char *buffer ,const char *format, [ argument ] ... );相當(dāng)于將buffer按format拆解為一個(gè)個(gè)的argument。
int sprintf(char *string, char *format [,argument,...]);相當(dāng)于將一個(gè)個(gè)的argument按format裝配成一個(gè)string。
實(shí)例:
#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.0000004 va_list參數(shù)列表的輸入輸出
以前函數(shù)名前面如果再增加一個(gè)字符"v",表示va_lsit。
如vscanf、vfscanf()、vsscanf()。
vsscanf()與sscanf()類似,但該函數(shù)用一個(gè)va_list類型形參列表代替變量參數(shù)列表。
#include #include //模擬實(shí)現(xiàn)系統(tǒng)提供的printf函數(shù)int vpf(char* fmt,...){va_list argptr;int cnt;va_start(argptr,fmt);// 第一個(gè)參數(shù)為指向可變參數(shù)字符指針的變量, // 第二個(gè)參數(shù)是可變參數(shù)的第一個(gè)參數(shù),通常用于指定可變參數(shù)列表中參數(shù)的個(gè)數(shù)cnt=vprintf(fmt,argptr);va_end(argptr);//將存放可變參數(shù)字符串的變量清空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.000000abc5 綜合比較
printf()、scanf() : 其f表示format,兩個(gè)參數(shù),隱含stdout或stdin
fprintf()、fscanf() : 前面的f表示File*,也是增加的參數(shù)
sscanf()、ssprintf() : 前面的s表示string,一個(gè)char*,也是增加的參數(shù)
vsscanf()、vssprintf() : 前面的v表示va_list,參數(shù)列表使用va_list
數(shù)據(jù)傳輸?shù)姆较蚴?#xff1a;
6 IO函數(shù)之間的相應(yīng)關(guān)系
-End-
總結(jié)
以上是生活随笔為你收集整理的c++ char*转string_CC++|输入输出与内存、缓存、设备文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小红书如何获得收益 这三种赚钱方式都很好
- 下一篇: iptables限制最大连接数_性能调优