日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux C学习--getline()函数

發布時間:2023/12/9 linux 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux C学习--getline()函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

getline()函數是什么?百度百科這樣解釋:

getline不是C庫函數,而是C++庫函數。它會生成一個包含一串從輸入流讀入的字符的字符串,直到以下情況發生會導致生成的此字符串結束。1)到文件結束,2)遇到函數的定界符,3)輸入達到最大限度。 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:文件描述符 那我們linux c中如何使用getline()函數呢? C 有 fgets(), gets() 函數,也有getline.用于讀取一行字符直到換行符,包括換行符。這個和我們前面那篇關于標準輸入輸出函數 流與緩沖區那篇中內容有聯系, printf() scanf() 屬于行緩沖,讀取一行數據(遇到'\n')便會刷新。 我們可以利用getline()一行一行的讀取數據,下面我們做個小實驗:首先創建一個文件,在文件中現實一些內容: [cpp]?view plaincopy
  • fs@ubuntu:~/qiang/getline$?mkdir?test??
  • fs@ubuntu:~/qiang/getline$?cd?test/??
  • fs@ubuntu:~/qiang/getline/test$?ls??
  • fs@ubuntu:~/qiang/getline/test$?touch?xiao??
  • fs@ubuntu:~/qiang/getline/test$?touch?qiang??
  • fs@ubuntu:~/qiang/getline/test$?touch?zhi??
  • fs@ubuntu:~/qiang/getline/test$?touch?hello??
  • fs@ubuntu:~/qiang/getline/test$?touch?world??
  • fs@ubuntu:~/qiang/getline/test$?ls??
  • hello??qiang??world??xiao??zhi??
  • fs@ubuntu:~/qiang/getline/test$?ls?>line.txt??
  • fs@ubuntu:~/qiang/getline/test$?ls??
  • hello??line.txt??qiang??world??xiao??zhi??
  • fs@ubuntu:~/qiang/getline/test$???
  • 看看line.txt里面的內容: 執行程序如下: [cpp]?view plaincopy
  • #include?<stdio.h>??
  • #include?<stdlib.h>??
  • ??
  • int?main(void)??
  • {??
  • ????FILE?*?fp;??
  • ????char?*?line?=?NULL;??
  • ????size_t?len?=?0;??
  • ????ssize_t?read;??
  • ????fp?=?fopen("/home/fs/qiang/getline/test/line.txt",?"r");??
  • ????if?(fp?==?NULL)??
  • ????????exit(EXIT_FAILURE);??
  • ????while?((read?=?getline(&line,?&len,?fp))?!=?-1)??
  • ????{??
  • ????????printf("Retrieved?line?of?length?%zu?:\n",?read);??
  • ????????printf("%s",?line);??
  • ????}??
  • ????if?(line)??
  • ????????free(line);??
  • ????exit(EXIT_SUCCESS);??
  • }??
  • 執行結果如下: [cpp]?view plaincopy
  • fs@ubuntu:~/qiang/getline$?gcc?-o?getline?getline.c???
  • fs@ubuntu:~/qiang/getline$?./getline???
  • Retrieved?line?of?length?6?:??
  • hello??
  • Retrieved?line?of?length?9?:??
  • line.txt??
  • Retrieved?line?of?length?6?:??
  • qiang??
  • Retrieved?line?of?length?6?:??
  • world??
  • Retrieved?line?of?length?5?:??
  • xiao??
  • Retrieved?line?of?length?4?:??
  • zhi??

  • 對比一下line.txt中的內容,可以看到每一行都被正確的讀取;。 這里簡單提一下fopen()函數,fopen()函數是基于數據流的I/O操作中,用來打開一個文件,或者說打開一個數據流,打開數據流以后,就可以對數據流繼續擰輸入和輸出的操作。C語言中stdin、stdout、stderr分別是標準輸入流、標準輸出流及標準出錯流的邏輯目的,他們都默認對應相應的物理終端。在程序運行伊始,不需要進行open()操作,流自動打開。關于文件描述符和數據流的區別,后面會開文章專門寫這一篇 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的Linux C学习--getline()函数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。