名詞釋義
在函式遇到和結束定界符相等的字元時函式結束,同時函式抽出定界符,此種情況下該定界符既不被放回輸入流,也不被放入要生成的字元串。所以由此可以理解輸入結束後的第一個回車是定界符,被確認後拋棄,而第二個才是程式執行運行時正常需要的!
套用範圍(gcc擴展定義)
C 有 fgets(), gets() 函式,gcc編譯器擴展定義了getline()函式.
用於讀取一行字元直到換行符,不讀取換行符 .
使用條件
linux標準C中使用條件:
#define _GNU_SOURCE
#include <stdio.h>
函式聲明:
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
返回值
成功:返回讀取的位元組數。
失敗:返回-1。
參數:
lineptr:指向存放該行字元的指針,如果是NULL,則有系統幫助malloc,請在使用完成後free釋放。
n:如果是由系統malloc的指針,請填0
stream:檔案描述符
套用舉例(gcc擴展定義)
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE * fp;
char * line = NULL;
size_t len = 0;
ssize_t read;
fp = fopen("/etc/motd", "r");
if (fp == NULL)
exit(EXIT_FAILURE);
while ((read = getline(&line, ≤n, fp)) != -1)
{
printf("Retrieved line of length %zu :\n", read);
printf("%s", line);
}
if (line)
free(line);
exit(EXIT_SUCCESS);
}
獨特性(C++函式)
//get(char*array,int count,char delim)與getline(char*array,int count,char delim)的不同點:
//1.當輸入的字元數小於count時遇到字元delim,get函式不會讀取delim這個字元,而getline函式將讀取這個字元但是不存進array當中去,而是將其丟棄,當然,兩者都會在讀取的字元串後面自動加上'\0'(teminator character)
//2.當輸入的字元數大於count時,則get函式唯讀取count-1個字元,而其餘的字元仍然保存在緩衝區中,還可再對其進行讀取;但是函式getline則不然。
//如果輸入行包含的字元數比指定要讀取的字元多,那么get()和getline()讀取指定數目的字元後,將把餘下
//的字元留在輸入佇列中。對get()而言,我們可以用另一條讀取函式來讀取留在輸入佇列中的數據,你也可
//以寫一段代碼將餘下的字元清除。不同的是getline()會設定失效位(faibit),並且關閉後面的輸入,這個時候
//用ch=cin.get();是讀取不到留在輸入佇列中的字元的。你可以用下面的命
//令來恢復輸入:
cin.clear();
//因為clear()會重置失效位,打開輸入。這個時候ch=cin.get();就可以讀取留在輸入佇列中的字元。
外加ignore用法舉例一則: