1. 程式人生 > >【C語言】實際專案開發過程中常用C語言函式的9大用法

【C語言】實際專案開發過程中常用C語言函式的9大用法

C語言是當中最廣泛的計算機程式語言,是所有計算機程式語言的祖先,其他計算機程式語言包括當前流行的Java語言,都是用C語言實現的,C語言是程式設計效率最高的計算機語言,既能完成上層應用開發,也能完成底層硬體驅動程式設計,在計算機程式設計當中,特別是在底層硬體驅動開發當中,具有不可替代的作用。在C語言學習過程當中,除了學習好C語言基本語法外,掌握常用的C語言庫函式的使用也是非常重要的,本文主要給同學們詳細講解在實際專案開發過程中常用C語言函式的用法。
在這裡插入圖片描述

1、printf 函式
  函式原型:int printf(const char *format,[argument]);
  功能:實現格式化輸入輸出
  返回值:實際輸出的字元個數
  函式引數:format 格式化字串
  argument 要輸出的引數
  
  常用的格式化型別有:


  d 有符號10進位制整數
  o 無符號8進位制整數
  u 無符號10進位制整數
  x 無符號的16進位制數字,並以小寫abcdef表示
  X 無符號的16進位制數字,並以大寫ABCDEF表示
  f 浮點數
  c 單個字元
  s 字串
  p 顯示一個指標,near指標表示為:XXXX,far指標表示為:XXXX:YYYY

用法舉例:
  以10進位制形式輸出整形變數a的值;
  int a = 100;
  printf(“a=%d\n”, a);
  上面程式的執行結果為:在螢幕終端輸出 a=100

2、fprintf函式
  函式原型:int fprintf (FILE* stream, const char*format, [argument])
  功能:將按照格式化字串格式化後的資料輸出到檔案流stream中,
  返回值:實際寫入到檔案的字元個數
  函式引數:stream 要輸出的檔案流指標
  format 格式化字串
  argument 要輸出的引數

備註:
  fprintf和printf函式非常類似,使用方法也相同,它們不同之處在於printf函式是輸出結果到標準輸出終端,一般為螢幕,而fprintf是將結果輸出到指定的檔案流;如果將引數輸出檔案流stream設定為標準輸出流stdout,則與printf函式等效。

如下所示:
  fprintf (stdout, const char*format, [argument])

用法舉例:
  將一個格式化字串寫入到檔案file1.txt中
  FILE *fp = fopen(“file1.txt”,“wb”);
  int count = 190;
  fprintf(fp,“hello :%d\n”, count);
  上面程式的執行結果為往file1.txt檔案中寫入 “hello :190” 字串.

3、sprintf 函式
  函式原型:int sprintf (char* buffer, const char*format, [argument])
  功能:將按照格式化字串格式化後的資料輸出到字串buffer中
  返回值:實際輸出到字串buffer的字元個數
  函式引數:buffer 要輸出的字串指標
  format 格式化字串
  argument 要輸出的引數
  
  備註:
  sprintf和printf函式非常類似,使用方法也相同,它們不同之處在於printf函式是輸出結果到標準輸出終端,一般為螢幕,而sprintf是將結果輸出到指定的字串buffer;

用法舉例:
  將一個格式化字串寫入到目標字串buffer中
  char buffer[50] = {0};
  int count = 190;
  fprintf(buffer,“hello :%d\n”, count);
  上面程式執行後,buffer中儲存字串 “hello :190”

4、scanf 函式
  函式原型:int scanf(char *format [,argument,…])
  功能:從標準輸入裝置(一般指鍵盤)實現格式化輸入
  返回值:成功返回讀入的資料項個數
  函式引數:format 格式化字串
  argument 輸入資料項的地址列表
 常用格式型別參考printf函式的個格式型別
 
  用法舉例:
  從標準輸入裝置中輸入一個整數到整形變數a中,輸入一個浮點數到浮點型變數b中
  int a=0;
  float b=0;
  scanf("%d%f",&a,&b);
  上面程式執行後,從鍵盤輸入: 19 18.6 ,程式將 19賦值給變數a, 18.6賦值給變數b .

備註:
   scanf 函式格式化字串中不能加 \n,如上例中這樣寫 scanf("%d%f\n",&a,%b) 是錯誤的。

5、sscanf 函式
  函式原型:int sscanf(const char *buffer, char *format [,argument,…])
  功能:讀取格式化字串中的位置
  返回值:成功返回讀入的資料項個數
  函式引數:buffer 要讀取的格式化字串
  format 格式化字串
  argument 輸入資料項的地址列表

備註:
  sscanf函式的使用和scanf函式非常類似,它們之間的區別在於 scanf函式是從標準輸入裝置輸入,而sscanf 是從指定的字串輸入;

用法舉例:
  通常使用sscanf函式類實現資料型別轉換,將字串轉換為整形或浮點型資料,舉例如下:
  char str[]=“0x1a”;
  int b=0;
  sscanf(str,“0x%x”,&b);
  上面程式的執行結果將字串0x1a 轉換成對應的16進位制值儲存到變數b中 .

6、getchar 函式
  函式原型: int getchar(void)
  功能: getchar 函式的功能是從標準輸入裝置讀取下一個字元,包括回車換行符都能讀取
  返回值: 成功返回使用者輸入字元對應的ASCII碼,失敗返回 -1;
  函式引數: 無

備註:
  getchar 函式實質是從標準輸入裝置緩衝區讀取一個字元,使用者呼叫 getchar 函式的時候,如果標準輸入緩衝區沒有資料,則等待使用者從鍵盤輸入;否則,直接從標準輸入緩衝區讀取一個字元,而不等待使用者從鍵盤輸入。
  請看下面的例子:
  int a = 0;
  char b = 0;
  scanf("%d", &a);
  b=getchar();

在上面程式碼中,我們首先呼叫 scanf 函式從鍵盤輸入一個整數到變數a中,接著呼叫getchar函式從鍵盤輸入一個字元到變數b中;但實際執行時,我們會發現輸入整數變數a後,程式並沒有停下來讓我們輸入字元變數b,這是因為我們在輸入整形變數a後,輸入緩衝區中儲存了回車符,程式在執行getchar函式時,發現輸入緩衝區中有回車符,直接讀取了輸入緩衝區中的回車符,而不再等待使用者從鍵盤輸入.解決辦法是,在呼叫函式getchar輸入字元之前,先清空緩衝區,

如下所示:
  int a = 0;
  char b = 0;
  scanf("%d", &a);
  while(getchar()!=’\n’); //清空輸入緩衝區
  b=getchar();
  上面程式中,在呼叫getchar()函式從鍵盤讀取字元之前,先執行語句while(getchar()!=’\n’); 清空輸入緩衝區.

用法舉例:
  從標準輸入裝置輸入一個字元到字元變數 s 中
  char s = 0;
  s = getchar();

7、fgets 函式
  函式原型: char *fgets(char *buf, int bufsize, FILE *stream);
  功能: 從檔案流stream中讀取資料,每次讀取一行。讀取的資料儲存在buf指向的字元陣列中。
  返回值: 函式執行成功返回buf
  失敗或讀到檔案結尾返回NULL
  函式引數:buf ,字元指標,用來存取所讀取的資料;
  bufsize, 整數,buf緩衝區的大小;
  stream, FILE指標,表示將要讀取的檔案流;

備註:
  使用 fgets函式讀取檔案流資料的時候,每次最多讀取bufsize-1個字元(第bufsize個字元賦’\0’),如果檔案中的該行,不足bufsize個字元,則讀完該行就結束。如若該行(包括最後一個換行符)的字元數超過bufsize-1,則fgets只返回一個不完整的行,但是,緩衝區總是以NULL字元結尾,對fgets的下一次呼叫會繼續讀該行。如果stream設定為標準輸入流 stdin,則表示從標準輸入裝置鍵盤讀取一行資料;

用法舉例:
  從標準輸入裝置讀取一行字串到字元陣列 str中
  char str[100] = {0};
  fgets(str,100,stdin);
  printf("%s\n",str);

8、memset 函式
  函式原型: void *memset(void *buffer, int ch, size_t count)
  功能: 將buffer中當前位置後面的count個位元組用 ch 替換
  返回值: 返回 buffer
  函式引數: buffer 指標或陣列,記憶體緩衝區的首地址
  ch 賦給 buffer的值
  count buffer的長度

備註:
  memset函式按位元組對記憶體塊進行初始化,實際專案開發過程中,我們通常使用memset來對一塊記憶體進行清0或填充某一個特定的值;它是對較大的結構體或陣列進行清零操作的一種最快方法。

用法舉例:
  使用memset函式對陣列清0
  char strbuf[1000];
  memset(strbuf,0,1000);

9、memcpy 函式
  函式原型: void *memcpy(void *dest, const void *src, size_t n)
  功能: 由src指向地址為起始地址的連續n個位元組的資料複製到以dest指向地址為起始地址的空間內。
  返回值: 函式返回一個指向dest的指標
  函式引數: dest 目標資料緩衝區起始地址
  src 源資料緩衝區起始地址
  n 要複製的位元組數

備註:
  由於函式拷貝的過程是一個位元組一個位元組的拷貝的,所以實際操作的時候要把void強制轉化為char,這樣在指標加的時候才會保證每次加一個位元組.在實際專案中,通常使用memcpy函式來給結構體變數賦值.

用法舉例:
  使用memcpy函式將struct sockaddr_in 結構體變數 addr賦值給addrx
  memcpy((char *)&addr,(char *)&addrx, sizeof(struct sockaddr_in))

以上就是今天我要給同學講解的常用C語言函式的使用,當然C語言的庫函式還有很多,這裡我們就不一一列舉了,希望對同學們能有所幫助。