getline函式

getline函式

getline不是C庫函式,而是gcc的擴展定義或者C++庫函式。它會生成一個包含一串從輸入流讀入的字元的字元串,直到以下情況發生會導致生成的此字元串結束。1)到檔案結束,2)遇到函式的定界符,3)輸入達到最大限度。

名詞釋義

在函式遇到和結束定界符相等的字元時函式結束,同時函式抽出定界符,此種情況下該定界符既不被放回輸入流,也不被放入要生成的字元串。所以由此可以理解輸入結束後的第一個回車是定界符,被確認後拋棄,而第二個才是程式執行運行時正常需要的!

套用範圍(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用法舉例一則:

相關詞條

相關搜尋

熱門詞條

聯絡我們