亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C/C++中的getline函數總結

2019-11-08 01:59:12
字體:
來源:轉載
供稿:網友

getline函數是一個比較常見的函數。根據它的名字我們就可以知道這個函數是來完成讀入一行數據的?,F在對getline函數進行一個總結。

在標準C語言中,getline函數是不存在的。下面是一個簡單的實現方式:復制代碼int getline_(char s[],int lim){    int c,i;    i=0;    while((c=getchar())!=EOF&&c!='/n'&&i<lim-1)        s[i++]=c;    s[i]='/0';    return i;}復制代碼下面是一個簡單的測試程序:復制代碼int test1(){    char s[100];    int len;    while((len=getline_(s,100))>0)        PRintf("%s/n",s);    return 0;}復制代碼但是這個實現是有問題的,就是遇到空行的時候也會停止的。為了解決這個問題,我們需要重新考慮while循環的判斷條件。在上面的實現中,我們是遇到EOF和換行'/n'的時候都停止 ,然后通過判斷所讀到的字符串的長度是否大于0來判斷是否結束。為了能讀入空行,我們需要判斷一下是否讀入的是結尾EOF,如果不是就繼續讀取就可以了。還有一點,EOF是什么?EOF是C語言中為了區分有效數據和輸入結束符的。C語言采用的解決辦法是:在沒有輸入時getchar函數將返回一個特殊值,這個特殊值與任何實際字符都不同。這個值成為EOF(end of file ,文件結束)。我們在聲明變量c 的時候,必須讓它大到足以存放getchar函數返回的任何值。之所以不把c聲明成char類型,是因為它必須足夠大,除了能存儲任何可能的字符外還要能存儲文件結束符EOF?! OF的輸入由系統鎖定。windows下是ctrl+z,linux/unix下是ctrl+d。下面是給出的修改后的getline函數復制代碼int getline2_(char s[],int lim){    int c,i;    i=0;    while((c=getchar())!=EOF&&c!='/n'&&i<lim-1)        s[i++]=c;    if(c==EOF&&i==0)        return -1;    s[i]='/0';    return i;}復制代碼如果是文件結尾(c==EOF&&i==0)的話,我們就返回-1,通過判斷返回值是否為-1來決定是否繼續入輸入:復制代碼int test1(){    char s[100];    int len;    while((len=getline2_(s,100))!=-1)        printf("%s/n",s);    return 0;}復制代碼這樣話就可以正確讀入所有的輸入了。在gcc編譯器中,對標準庫進行了擴展,加入了一個getline函數。該函數的定義如下:#include <stdio.h>  ssize_t getline(char **lineptr, size_t *n, FILE *stream);其中*lineptr指向一個動態分配的內存區域。*n是所分配內存的長度。如果*lineptr是NULL的話,getline函數會自動進行動態內存的分配(忽略*n的大?。?,所以使用這個函數非常注意的就使用要注意自己進行內存的釋放。如果*lineptr分配了內存,但在使用過程中發現所分配的內存不足的話,getline函數會調用realloc函數來重新進行內存的分配,同時更新*lineptr和*n。注意*lineptr指向的是一個動態分配的內存,由malloc,calloc或realloc分配的,不能是靜態分配的數組。下面是使用這個函數情況,事先分配了動態內存。復制代碼void test2(){    int read;    int len=100;    char *line=NULL;    if((line=malloc((len+1)))==NULL){        printf("Can't get memory/n");        exit(-1);    }    while((read=getline(&line,&len,stdin))!=-1)        printf("%s/n",line);    free(line);}復制代碼下面是一個沒有提前進行內存分配的情況:復制代碼void test3(){    int read;    int len=0;    char *line=NULL;    while((read=getline(&line,&len,stdin))!=-1)        printf("%s/n",line);    free(line);}復制代碼同樣最后要進行內存的釋放。這兒還要注意一個問題就是,getline函數讀入的一行是包括最后的換行符的。之前我們寫的函數是不包括這個的。下面我們進行修改一下,也讀入換行符。復制代碼int getline3_(char s[],int lim){    int c,i;    i=0;    while((c=getchar())!=EOF&&c!='/n'&&i<lim-1)        s[i++]=c;    if(c==EOF&&i==0)        return -1;    if(c=='/n')        s[i++]=c;    s[i]='/0';    return i;}復制代碼這樣也讀入了換行符。這樣的話,這個getline函數就不錯了。在C++中為了使用的方便,C++在標準庫中添加了getline函數。其實在C++中對不同的輸入流對象都定義了一個getline函數,即:std::fstream::getlinestd::istream::getlinestd::ifstream::getlinestd::iostream::getlinestd::wfstream::getlinestd::wistream::getlinestd::wifstream::getlinestd::wiostream::getlinestd::stringstream::getlinestd::basic_fstream::getlinestd::basic_istream::getlinestd::istringstream::getlinestd::wstringstream::getlinestd::basic_ifstream::getlinestd::basic_iostream::getlinestd::wistringstream::getlinestd::basic_stringstream::getlinestd::basic_istringstream::getline這兒我們討論標準輸入對象的getline函數,其他的對象的情都是類似的。在頭文件<iostream>中聲明了getline函數:istream::getlineistream& getline (char* s, streamsize n );istream& getline (char* s, streamsize n, char delim );函數是C類型的數組。因為C++中允許對函數進行重載,所以可以有多個同名函數。delim參數是指定分隔符。如果不指定的話,默認使用'/n'下面是一個例子:void test1(){    char line[100];    while(cin.getline(line,100))        cout<<line<<endl;}注意這兒的getline是要讀入空白符。但是不包括最后的換行符。C++中還定義了一個在std名字空間的全局函數,因為這個getline函數的參數使用了string字符串,所以聲明在了<string>頭文件中了。聲明如下:istream& getline ( istream& is, string& str, char delim );istream& getline ( istream& is, string& str );簡單的示例如下:void test2(){    string line;    while(getline(cin,line))        cout<<line<<endl;}注意此處也是不讀入換行符的。所以在C++中讀取一行的函數是不讀入換行符的,而GCC中getline函數是讀入換行符的??梢岳斫鉃?,一般情況下不讀入,特別的是GCC的讀入。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品在线91| 欧美色道久久88综合亚洲精品| 精品欧美激情精品一区| 久久免费高清视频| 国产午夜精品一区理论片飘花| 国产精品久久久久999| 欧美大片免费看| 午夜精品久久久久久久99黑人| 亚洲性猛交xxxxwww| 欧美乱妇高清无乱码| 91chinesevideo永久地址| 欧美亚洲激情视频| 日韩美女免费观看| 国产精品99久久久久久白浆小说| 国内揄拍国内精品少妇国语| 国产一区二区三区三区在线观看| 日韩视频免费大全中文字幕| 一区二区成人精品| 91久久国产综合久久91精品网站| 亚洲成人黄色网| 色综合91久久精品中文字幕| 92福利视频午夜1000合集在线观看| 国产精品久久久久久久久久久久久| 九九热r在线视频精品| 亚洲日韩中文字幕在线播放| 国产精品久久久久久av| 日韩av在线免费| 日本精品视频在线观看| 国产91色在线播放| 国产精品久久久久9999| 久久久极品av| 久久久精品亚洲| 亚洲午夜久久久久久久| 91久久综合亚洲鲁鲁五月天| 欧美日韩成人黄色| 国产精品久久久久久超碰| 国产成人久久久精品一区| 欧美日韩国产第一页| 啊v视频在线一区二区三区| 亚洲三级av在线| 国产97在线播放| 91av在线国产| 亚洲护士老师的毛茸茸最新章节| 91久久久在线| 91精品国产91久久久久久最新| 成人综合网网址| 国产成人精品av在线| 国产亚洲一区精品| 国产精品免费网站| 亚洲美女又黄又爽在线观看| 97香蕉久久超级碰碰高清版| 2019日本中文字幕| 亚洲成人aaa| 亚洲wwwav| 国产精品色婷婷视频| 7777免费精品视频| 色婷婷综合成人| 国产精品视频1区| 日本精品久久中文字幕佐佐木| 久久伊人精品视频| 欧美xxxx做受欧美.88| 欧美日本高清一区| 91国语精品自产拍在线观看性色| 亚洲第一中文字幕| 成人黄色中文字幕| 亚洲自拍欧美另类| 成人在线观看视频网站| 最好看的2019的中文字幕视频| 国产精品国产自产拍高清av水多| 国产视频在线一区二区| 国产精品电影久久久久电影网| 成人久久18免费网站图片| 久久久久久久久久av| 亚洲最大成人网色| 韩国精品美女www爽爽爽视频| 欧美高清在线播放| 国产999精品| 一区二区三区回区在观看免费视频| 欧美www视频在线观看| 国产脚交av在线一区二区| 久久久国产精品亚洲一区| 亚洲欧美激情精品一区二区| 国产高清在线不卡| 国产免费一区二区三区在线观看| 国内精品久久久久久久| 91高清免费在线观看| 国产精品日韩在线观看| 久久久精品在线观看| 国产999精品视频| 国产免费一区二区三区在线能观看| 91中文在线观看| 久久99国产精品久久久久久久久| 国产成人精彩在线视频九色| 国产精品毛片a∨一区二区三区|国| 色综合久久88色综合天天看泰| 亚洲韩国日本中文字幕| 亚洲成年人在线| 亚洲精品电影在线| 国产亚洲欧洲高清一区| 日韩资源在线观看| 国产精品一二三在线| 国产香蕉97碰碰久久人人| 亚洲欧美另类在线观看| 亚洲精品大尺度| 国产精品扒开腿做爽爽爽男男| 久久99国产综合精品女同| 亚洲精品乱码久久久久久按摩观| 亚洲丝袜av一区| 亚洲精品98久久久久久中文字幕| 麻豆国产va免费精品高清在线| 91高清免费视频| 精品国产精品三级精品av网址| 国产亚洲美女精品久久久| 中文字幕欧美日韩| 欧美性猛交xxxx黑人| 欧美丝袜第一区| 国产一区二区成人| 国产成人精品免高潮在线观看| 欧美日韩国产123| 亚洲人成电影在线播放| 久久视频国产精品免费视频在线| 亚洲国产精彩中文乱码av在线播放| 欧美性少妇18aaaa视频| 久久国产精品影片| 国产福利精品视频| 色777狠狠综合秋免鲁丝| 欧美激情欧美激情| 久久成人av网站| 国产一区二区成人| 91精品久久久久久久| 亚洲毛片在线免费观看| 国产精品视频在线观看| 91免费在线视频| 久久精品最新地址| 欧美精品在线网站| 欧美最猛性xxxxx(亚洲精品)| 国产日韩在线播放| 91tv亚洲精品香蕉国产一区7ujn| 国产噜噜噜噜久久久久久久久| 欧美日韩ab片| 青草青草久热精品视频在线观看| 亚洲国产欧美自拍| 日韩中文字在线| 欧美国产日韩一区二区三区| 国产一区红桃视频| 久久免费视频观看| 日韩精品www| 91精品国产91久久久久久吃药| 日本精品va在线观看| 欧美成人中文字幕| 国产精品九九久久久久久久| 最近2019年手机中文字幕| 欧美超级免费视 在线| 欧洲成人免费aa| 裸体女人亚洲精品一区| 精品人伦一区二区三区蜜桃网站| 亚洲女同精品视频| 国产日本欧美视频| 久久精品国产亚洲精品| 久久九九免费视频| 久久久久久亚洲精品中文字幕| 欧美激情18p| 黄色91在线观看| 欧美—级a级欧美特级ar全黄|