首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 標準庫函數深度解析:exit() 與 memset() 實戰詳解

     編輯:關於C語言

C 標準庫函數深度解析:exit() 與 memset() 實戰詳解

1. exit() —— 立即終止程式

#include <stdlib.h>
void exit(int status);
  • 作用:在呼叫處直接結束整個程式,無論身處 main 或任意函數。
  • 參數:status=0 表示正常結束;非零表示異常,具體值由作業系統定義(通常 1 為通用錯誤)。
  • 與 return 差異:return 僅返回當前函數;exit 繞過呼叫堆疊直接觸動程式終止流程(會執行 atexit 登記的清理函數、刷新 I/O 緩衝區)。

2. memset() —— 記憶體區塊填充

#include <string.h>
void *memset(void *ptr, int value, size_t num);
  • 功能:將 ptr 起始的 num 個位元組全部設為 value(取低 8 位)。
  • 常見用途:結構體/陣列初始化為 0、清空緩衝區、字串截斷。

實戰範例與輸出

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "abcde";
    printf("原始: %s\n", str);           // abcde

    memset(str, 0, strlen(str));         // 填充 '\0'
    printf("填0後: '%s'\n", str);        // (空字串)

    char str2[] = "abcde";
    memset(str2, '0', strlen(str2));     // 填充字元 '0'
    printf("填'0': %s\n", str2);         // 00000
    return 0;
}

memset 填 0 結果 memset 填 '0' 結果

關鍵細節提醒

  1. memset(str, 0, ...) 是將每個位元組設為 0,對 int 陣列等同於所有元素歸零;但對 float/double/指標不保證語義上為 0.0/NULL(視平台表示法而定)。
  2. 第二參數為 int 但實際只取低 8 位,故 memset(arr, 0x01020304, n) 等同 memset(arr, 0x04, n)。
  3. 鏈表節點分配後務必 memset(node, 0, sizeof(*node)) 初始化,避免野指標。

持續更新中…

本系列將陸續補充 memcpy、strncpy、qsort、bsearch 等高頻函數的深度用法與坑點分析。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved