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

C語言記憶體、字串與圖形函數參考(M 開頭函數)

     編輯:關於C語言

C語言 M 開頭函數完整指南:main、記憶體操作、目錄與圖形

本文系統整理以 M 開頭的核心 C 函數,涵蓋程式進入點 main 參數詳解、數學錯誤處理 matherr、記憶體區塊操作 (memcpy 族群)、動態配置 malloc、目錄建立 mkdir、暫存檔命名 mktemp、遠端指標建構 MK_FP、浮點數分解 modf、以及 BGI 圖形座標移動函數 (moveto, moverel 等)。

main — 程式進入點與命令列參數

標準原型:

int main(void);
int main(int argc, char *argv[]);
int main(int argc, char *argv[], char *env[]);
  • argc:命令列參數個數 (含程式名)。
  • argv[0]:程式完整路徑 (DOS 3.0+),或空字串 (舊版)。
  • argv[1]..argv[argc-1]:使用者輸入參數,雙引號可包含空白。
  • env:環境變數陣列,格式 NAME=VALUE,以 NULL 結尾。

範例:列印所有參數與環境變數

#include <stdio.h>

int main(int argc, char *argv[], char *env[]) {
    int i;
    printf("argc = %d\n", argc);
    for (i = 0; i < argc; i++)
        printf("argv[%d] = %s\n", i, argv[i]);

    for (i = 0; env[i]; i++)
        printf("env[%d] = %s\n", i, env[i]);
    return 0;
}

執行:EXAMPLE first "with space" 3
輸出:argc=4, argv[0]=EXAMPLE, argv[1]=first, argv[2]=with space, argv[3]=3

matherr — 自訂數學函數錯誤處理

功能:當數學函數 (如 sqrt(-1), log(0)) 發生定義域/值域錯誤時被呼叫,回傳非零可抑制預設錯誤訊息與 errno 設定。

#include <math.h>

int matherr(struct exception *e) {
    /* 記錄錯誤、修正結果、或直接忽略 */
    return 1; // 1 = 不輸出錯誤訊息,0 = 交給預設處理
}

記憶體區塊操作家族 (mem*)

函數功能關鍵差異
memcpy複製 n 位元組來源與目的地不可重疊
memmove移動 n 位元組正確處理重疊區域
memccpy複製至指定字元為止遇到 ch 停止並回傳下一位址
memchr搜尋前 n 位元組找到回傳指標,否則 NULL
memicmp比較前 n 位元組忽略大小寫
memset設定前 n 位元組為指定值常用清零結構體
movmem同 memmove (Turbo C 別名)參數順序 src, dest, len

範例:安全複製字串含終止符

char src[] = "Hello";
char dest[10];
memcpy(dest, src, strlen(src) + 1); // 複製含 '\0'

malloc / free — 動態記憶體配置

void *malloc(size_t size);
void free(void *ptr);

範例:

char *p = malloc(100);
if (!p) { perror("malloc"); exit(1); }
strcpy(p, "Dynamic");
printf("%s\n", p);
free(p);

mkdir / rmdir — 目錄建立與刪除

int mkdir(const char *path);
int rmdir(const char *path);

成功傳回 0,失敗傳回 -1 並設定 errno。

mktemp — 產生唯一暫存檔名

char *mktemp(char *template);

template 需包含 6 個 X (如 TMPXXXXXX),函數會就地修改字串。

MK_FP — 建構遠端指標

void far *MK_FP(unsigned seg, unsigned off);

將段址與位移合併為 32 位元遠端指標,常用於直接存取影像緩衝區 (0xB800) 或硬體暫存器。

modf — 浮點數分解整數與小數部

double modf(double x, double *intpart);

回傳小數部,*intpart 接收整數部 (同號)。

BGI 圖形座標移動函數

函數功能原型
moveto將當前點 (CP) 移至絕對座標 (x,y)void far moveto(int x, int y);
moverel將 CP 依相對距離 (dx,dy) 移動void far moverel(int dx, int dy);
movetext複製文字模式螢幕矩形區塊int movetext(int l, int t, int r, int b, int nl, int nt);

範例:繪製相對移動軌跡

moveto(20, 30);
putpixel(getx(), gety(), WHITE);
moverel(100, 50);
putpixel(getx(), gety(), WHITE);

movedata — 跨段記憶體複製

void movedata(int src_seg, int src_off, int dst_seg, int dst_off, unsigned n);

可在任意段址間複製資料,例如備份單色螢幕內容:

movedata(0xB000, 0, _DS, (unsigned)buffer, 80*25*2);

normvideo / nosound — 文字屬性與聲音控制

  • normvideo():恢復正常文字亮度 (關閉高亮)。
  • nosound():關閉 PC 蜂鳴器 (配合 sound(freq), delay(ms) 使用)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved