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

C語言標準庫函數速查:P 開頭函數完整指南

     編輯:關於C語言

C語言標準庫函數速查:P 開頭函數完整指南

P 開頭的標準庫函數涵蓋了文件名解析、內存直接訪問、錯誤處理、圖形繪製、多項式計算、數學運算、格式化輸出、字符/字符串輸出、環境變量操作、圖像處理、像素操作、文本屏幕操作等極廣泛的領域。本文系統梳理這些函數的語法、功能與實戰示例。

文件名解析

parsfnm - 解析文件名到 FCB 結構

函數原型: char *parsfnm(const char *cmdline, struct fcb *fcbptr, int opt);

功能: 從命令行字符串解析文件名並填充 FCB (File Control Block) 結構,屬於 DOS 時代遺留接口。

內存直接訪問 (Peek/Poke)

peek / peekb - 讀取內存字/字節

函數原型:

  • int peek(unsigned int segment, unsigned int offset);
  • char peekb(unsigned int segment, unsigned int offset);

功能: 直接讀取指定段:偏移地址的內存值。常用於 DOS 環境下檢鍵盤狀態、視頻內存等。

示例:檢測鍵盤鎖鍵狀態

#include <dos.h>
#include <stdio.h>

int main(void) {
    unsigned int kb_flags = peekb(0x0040, 0x0017);
    printf("Keyboard status:\n");
    printf("Right Shift: %s\n", (kb_flags & 1) ? "On" : "Off");
    printf("Left Shift:  %s\n", (kb_flags & 2) ? "On" : "Off");
    printf("Ctrl:        %s\n", (kb_flags & 4) ? "On" : "Off");
    printf("Alt:         %s\n", (kb_flags & 8) ? "On" : "Off");
    printf("Scroll Lock: %s\n", (kb_flags & 16) ? "On" : "Off");
    printf("Num Lock:    %s\n", (kb_flags & 32) ? "On" : "Off");
    printf("Caps Lock:   %s\n", (kb_flags & 64) ? "On" : "Off");
    return 0;
}

poke / pokeb - 寫入內存字/字節

函數原型:

  • void poke(unsigned int segment, unsigned int offset, int value);
  • void pokeb(unsigned int segment, unsigned int offset, char value);

功能: 直接向指定段:偏移地址寫入數據。極度危險,錯誤使用會導致系統崩潰,現代受保護模式 OS 通常禁止應用程序使用。

錯誤處理

perror - 打印系統錯誤信息

函數原型: void perror(const char *s);

功能: 將參數字符串與當前 errno 對應的系統錯誤信息輸出到標準錯誤流。

示例:

#include <stdio.h>

int main(void) {
    FILE *fp = fopen("nonexist.txt", "r");
    if (!fp) perror("Unable to open file");
    return 0;
}

圖形繪製 (BGI)

pieslice - 繪製並填充扇形

函數原型: void far pieslice(int x, int y, int stangle, int endangle, int radius);

功能: 以 (x,y) 為圓心,繪製從起始角度到結束角度的扇形並填充。

數學運算

poly - 多項式求值

函數原型: double poly(double x, int n, const double c[]);

功能: 計算多項式 c[0] + c[1]*x + c[2]*x^2 + ... + c[n]*x^n 的值。係數數組按冪次升序排列。

pow / pow10 - 指數運算

詳見 L 開頭函數指南 中的同名函數說明。

格式化輸出

printf - 格式化輸出到標準輸出

函數原型: int printf(const char *format, ...);

功能: C 語言最核心的格式化輸出函數,支持豐富的格式控制符。

字符/字符串輸出

putc - 輸出字符到流

函數原型: int putc(int c, FILE *stream);

putchar - 輸出字符到 stdout

函數原型: int putchar(int c);

等價於: putc(c, stdout)

putch - 輸出字符到控制台 (無緩衝)

函數原型: int putch(int c);

特點: 直接輸出到控制台,不經標準 I/O 緩衝,常用於交互式程序。

puts - 輸出字符串到 stdout

函數原型: int puts(const char *s);

特點: 自動在末尾添加換行符。

環境變量操作

putenv - 設置環境變量

函數原型: int putenv(char *string);

功能: 將 name=value 形式的字符串加入進程環境表。注意:傳入的字符串指針會被環境表直接引用,不能釋放或修改該緩衝區。

圖形圖像操作 (BGI)

putimage - 輸出位圖到屏幕

函數原型: void far putimage(int x, int y, void far *bitmap, int op);

功能: 將之前用 getimage 獲取的位圖繪製到指定位置。op 支持 COPY_PUT、XOR_PUT、OR_PUT、AND_PUT、NOT_PUT 等混合模式。

putpixel - 繪製單個像素

函數原型: void far putpixel(int x, int y, int color);

功能: 在指定座標繪製指定顏色的像素點。

文本模式屏幕操作

puttext - 將文本緩衝區內容寫回屏幕

函數原型: int puttext(int left, int top, int right, int bottom, void *source);

功能: 配合 gettext 實現文本屏幕區域的保存與恢復。

putw - 輸出整數到流 (二進制)

函數原型: int putw(int w, FILE *stream);

功能: 以二進制形式寫入整數,配合 getw 讀取。注意跨平台字節序問題。


現代開發建議:

  • peek/poke:現代作業系統 (Windows/Linux/macOS) 實現內存保護,用戶態程序無法直接訪問物理內存。嵌入式開發中請使用映射後的虛擬地址。
  • parsfnm、FCB 結構:屬於 DOS 1.x 時代遺產,現代開發請使用 fopen、stat、glob 等 POSIX/ISO C 標準接口。
  • putenv:線程不安全,多線程環境下建議使用 setenv (POSIX) 或 Windows API SetEnvironmentVariable。
  • BGI 圖形庫:教學演示可用,生產環境請使用 SDL、OpenGL、Qt 等現代圖形庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved