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.0000004 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.000000abc5 綜合比較
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++|输入输出与内存、缓存、设备文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小红书如何获得收益 这三种赚钱方式都很好
- 下一篇: s3c2440移植MQTT