1. 程式人生 > >C語言中的那些庫函式(持續更新中)

C語言中的那些庫函式(持續更新中)

1.【exit()】

        exit是在呼叫處強行退出程式,執行一次程式就結束。exit(0)表示正常退出。exit(1)表示異常退出,這個1是返回給作業系統的。無論是寫在main函式中,還是在其他函式中,都是程式退出。一般都是認為0是正常退出、其他數字是異常退出。所在的標頭檔案是stdlib.h.  返回值的意義其實同main函式中的return一樣,零表示正常,非零表示異常。

2.【memset】

函式的宣告為:memset(void *, int, size_t n)。功能是將void *所指向的某一塊記憶體(大小由size_t指定,可以使用sizeof函式計算)中的首n個位元組的內容全部設定為int值。這個函式通常為新申請的記憶體做初始化工作。而如果是在連結串列中,當我們申請一個新的節點,也會使用這個函式來初始化這個節點。示例程式碼如下:

#include "stdio.h"
#include "string.h"

int main(int argc,const char* argv[]){

    char str[] = "abcde";
    printf("%s\n",str);
    memset(str, 0, strlen(str));
    printf("%s\n",str);

    return 0;
}

列印結果如下:

可以看到其實是把陣列置空了,而不是把數組裡面的元素每個置為0.

#include "stdio.h"
#include "string.h"

int main(int argc,const char* argv[]){

    char str[] = "abcde";
    printf("%s\n",str);
    memset(str, '0', strlen(str));
    printf("%s\n",str);

    return 0;
}
列印結果如下:

在這裡是把陣列中的元素都替換為字元‘0’。

【3.malloc】

       需要包含標頭檔案stdlib.h。函式宣告為 void *malloc(int size). malloc向系統申請分配size個位元組的記憶體空間。返回型別為void *型別。void*表示未確定型別的指標,也就是指向這塊記憶體的指標。可以強制轉換為任何其他型別的指標,如果不進行型別轉換就會報錯。malloc只是進行分配記憶體,並沒有對記憶體進行初始化,所以得到的一片新記憶體中,值將是隨機的。如果分配失敗,則返回一個空指標(NULL)。關於分配失敗的原因,空間不足就是一種。注意的是:申請了記憶體空間後,必須檢查是否分配成功。

示例程式碼如下:

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

int main(int argc,const char* argv[]){

    char *p;

    p = (char *)malloc(sizeof(char));
    if(p)
        printf("記憶體分配地址: 0x%x\n",p);
    else
        printf("分配記憶體失敗!\n");
    free(p);

    return 0;
}

列印結果如下:


上面的程式碼中我其實只是分配了一個char字元的空間。如果想要n個字元,直接如下:(char *)malloc(n * sizeof(char))即可。

【4.sizeof】

計算空間的位元組數。可以對資料型別、變數進行計算。實際上,sizeof計算物件的大小也是轉換成對其物件型別的計算。也就是說,同種型別的不同物件其sizeof值都是一致的。示例程式碼如下:

#include "stdio.h"
#include "string.h"
#include "stdlib.h"

int main(int argc,const char* argv[]){


    int a[10];
    //因為每個int型佔用4個位元組
    printf("陣列佔用位元組:%d\n",sizeof(a));

    printf("char佔用位元組:%d,int佔用位元組:%d,double佔用位元組:%d\n",sizeof(char),sizeof(int),sizeof(double));

    int *p;
    //可以看到,在這裡一個指標佔8個位元組
    printf("指標佔用位元組:%d\n",sizeof(p));

    char *str1 = "abcde";
    //這裡列印的也是一個指標,注意char是我們程式設計能用的最小資料型別
    printf("字串1佔用位元組 :%d\n",sizeof(str1));

    char str2[] = "iiii";
    //這裡列印陣列的長度
    printf("字串2佔用位元組:%d\n",sizeof(str2));

    return 0;
}

列印結果如下:


【5.free】

        前面說到了malloc函式,那麼配對必須要講到free()函式,free也是包含在stdlib.h這個標頭檔案中。作用是釋放malloc給指標變數分配的記憶體空間。需要注意的是:使用後該指標變數一定要重新指向NULL,防止野指標出現,有效規避誤操作。對於free(p)這條語句,如果本身p就是NULL指標,那麼free對p無論操作多少次都不會出現問題,如果本身p不是NULL指標,那麼free對p連續操作兩次就會導致程式執行錯誤。malloc和free應該是配對使用,如果申請後不釋放就是記憶體洩露,;如果無故釋放那就是什麼也沒有做。

       free到底釋放了什麼?free釋放的是指標指向的記憶體,注意釋放的是記憶體,而不是指標。指標並沒有被釋放,指標仍然指向原來的儲存空間。指標是一個變數,只有程式結束時才被銷燬。釋放了記憶體空間後,原來指向這塊記憶體的指標還是存在,只不過現在指標指向的內容是不確定的。這就是我上面所說的要把指標置為NULL。

【6.assert】

        其實準確來說,assert斷言並不是函式,而是巨集。但是在使用方式上特別像函式,所以也放到這裡整理。在編寫程式碼時,做出一些假設,斷言就是用來捕捉這些假設,也可以認為是一種異常處理。它一般是一個條件表示式,如果條件返回錯誤,則終止程式執行。一般可以在測試時啟用斷言,部署時禁用斷言。

相關推薦

C語言那些函式持續更新

1.【exit()】        exit是在呼叫處強行退出程式,執行一次程式就結束。exit(0)表示正常退出。exit(1)表示異常退出,這個1是返回給作業系統的。無論是寫在main函式中,還是在其他函式中,都是程式退出。一般都是認為0是正常退出、其他數字是異常退出。所

數據SQL語言學習--數據查詢持續更新

from credit name 數據庫技術 日期 and 語句 cor 原理 上機練習1 1、 啟動SQL Server 2008中的 SQL Server Management Studio。 2、 創建數據庫St

UML語言與軟體架構設計持續更新

1.前言 本文是以《軟體架構設計》和《大象Think in UML》兩本書的內容為基礎進行講述,以個人的理解做了提煉和總結,旨在能夠通過本文對UML語言以及其在系統設計中的應用有一個概括性的瞭解。   2.《軟體架構設計》 圖 架構設計過程的節奏  

總結Spring框架擴充套件點bean生命週期的擴充套件點持續更新...

面向業務開發的時候,程式設計師需要明白業務的邏輯,並設計程式碼結構。而在進行中介軟體開發的時候,則需要明白框架的邏輯,進行開發。 所以要開發提供給spring的中介軟體,需要知道spring中有哪些擴充套件點,好在對應的地方插入我們的功能。 1. Spring容器初始化b

阿里雲直播在實際使用的一些坑持續更新...

前言    最近在基於阿里雲做直播會議的實踐,在使用中遇到了部分坑,在此記錄下,提醒自己和同道中人。具體坑如下:    為了保證推流和拉流的安全性,阿里雲是預設開啟了鑑權保護的,所以不帶auth_key是無法訪問的。    auth_key的生成需參照阿里雲的文件描述,根據規

一個博客萌新的C語言之旅持續更新....

方便 流程 函數聲明 語言 tex 表達 賦值語句 當前 寫在前面 先更新上一次留下的的C語言練習答案,如下: #include <stdio.h> double mj(double r) { return 3.14*r*r; } int main() { i

一個部落格萌新的C語言之旅持續更新....

先更新上一次留下的的C語言練習答案,如下: #include <stdio.h> double mj(double r) { return 3.14*r*r; } int main() { int r; double s; r=3; s=mj(r); printf("%f",s); }

C++的一些小操作、常用函式持續更新

  1. 強制保留n位小數(位數不足則強制補零)    標頭檔案:    #include <iomanip>    在輸出前:    cout<<setprecision(n);    也有不用標頭檔案的方式,在輸出前:    cout.setf(ios::fixed); 

C語言常用函式含詳細用法

一、數學函式 呼叫數學函式時,要求在原始檔中包下以下命令列: #include <math.h> 函式原型說明 功能 返回值 說明 int abs( int x) 求整數x的絕對值 計算結果 double fabs(double

C/C++】C語言math.h函式atan與atan2的區別

Ref 在 math.h 標準庫中,定義了兩個反正切函式: //返回以弧度表示的 x 的反正切 double atan(double x) //返回以弧度表示的 y/x 的反正切。y 和 x 的值的符號決定了正確的象限。 double at

C語言字串處理基礎函式

1.strlen()函式 功能:函式返回字串str 的長度( 即空值結束符之前字元數目,不包括控制結束符)。 語法: #include <string.h> size_t strlen( char *str ); 例子: #include <stdio

C語言模擬實現函式strlen的三種方法

學習之路無止境,漫漫長夜,我愛程式設計。 今天練習的是用C語言來簡單實現庫函式strlen。 首先strlen 函式的作用是求出字串長度,眾所周知,在C語言中,字串是以字串陣列的形式儲存的,並且以’\0’為結束標誌。先讓我們看看strlen庫函式的引數即返回值

c++ 之自己寫函式 靜態

c++ 庫函式,分為靜態庫,靜態庫的好處就是沒有太多約束,靜態庫寫的類,可以被整合。缺點是,程式碼是直接編譯到目標檔案裡面,所以程式碼量會增加 。 庫函式分為 Win32 Application和Win32 Console Application 和MFC  庫。 Win3

PTA|團體程式設計天梯賽-練習題目題解錦集C/C++持續更新……

PTA|團體程式設計天梯賽-練習題目題解錦集(持續更新中) 實現語言:C/C++;      歡迎各位看官交流討論、指導題解錯誤;或者分享更快的方法!! 題目連結:https://pintia.cn/problem-sets/994805046380707

C++ Primer 中文版第五版錯誤持續更新

1. P16:練習 1.19,“修改你為 1.4.1 節練習 1.10” 改為 “修改你為 1.4.1 節練習 1.11” 2. P21:1.6 書店程式中,第5行的註釋 // 儲存下一條

C語言的字串處理函式

1、strcpy 2、strcat 3、strncat 4、strcmp 5、strlen 6、bzreo: eg:bzero(ptr,sizeof(char) * 100)    :    從ptr

作業系統檔案系統C語言實現的部分函式

void startsys() { int i; FILE *fp; char str[9]; myvhard = (unsigned char *)malloc(SIZE*sizeof(char)); /*申請 1M空間*/ if((fp=fopen("myfsy

Android 系統那些能大幅提高工作效率的 API 彙總持續更新...

前言 “條條大路通羅馬。”工作中,實現某個需求的方式往往不是唯一的,這些不同實現方式不僅表現在程式碼質量上,還影響著我們的工作效率。就像,在 Android 系統中,總有那麼一些鮮為人知的 API 能夠減少我們很多零碎的工作量。於是,就想憑著一些經

IT(計算機/軟件/互聯網)專業詞匯寶典持續更新

hub point charger 中國 mar asi lose 社區 less 1.Stack Overflow:http://stackoverflow.com/ .一個著名的IT技術的問答站點。全然免費。程序猿必知。2.programmer:程序猿3.e

git的常用語句持續更新

文件 版本 reflog 使用 一個 更改 commit sta add mkdir learngit // 創建文件夾cd learngit //跳轉到指定文件夾pwd //顯示當前文件夾路徑git init //把這個目錄變成可管理的倉庫git add learngi