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

C語言檔案與字串轉換函數參考(U 開頭函數)

     編輯:關於C語言

C語言 U 開頭函數詳解:ultoa、ungetc、ungetch、unixtodos、unlink、unlock

本文整理以 U 開頭的實用 C 函數,涵蓋無號長整數轉字串、字元推回輸入串流/鍵盤緩衝區、Unix 時間轉 DOS 格式、檔案刪除與檔案鎖定解除等功能,附標準原型與實戰範例。

ultoa — 無號長整數轉字串

char *ultoa(unsigned long value, char *str, int radix);

參數:value 待轉數值,str 目的緩衝區 (需足夠大),radix 基數 (2, 8, 10, 16…)。回傳 str。

unsigned long n = 3123456789UL;
char buf[32];
ultoa(n, buf, 16); // buf = "BA5EBA15"

ungetc — 將字元推回串流

int ungetc(int c, FILE *stream);

用途:解析器「前瞻一字元」後發現不屬於當前 token,需歸還給串流。每次呼叫保證至少可推回一字元;EOF 不可推回。

/* 讀取整數,遇非數字字元推回 */
int i = 0, ch;
while ((ch = getchar()) != EOF && isdigit(ch))
    i = i * 10 + (ch - '0');
if (ch != EOF) ungetc(ch, stdin); // 歸還非數字字元
printf("%d\n", i);

ungetch — 將字元推回鍵盤緩衝區

int ungetch(int c);

差異:作用於 conio.h 的鍵盤緩衝區,搭配 getche()/getch() 使用。同樣至少保證一字元推回深度。

int i = 0, ch;
while ((ch = getche()) != EOF && isdigit(ch))
    i = i * 10 + (ch - '0');
if (ch != EOF) ungetch(ch);
printf("\n%d\n", i);

unixtodos — Unix 時間轉 DOS 日期時間結構

void unixtodos(long utime, struct date *d, struct time *t);

utime 為自 1970-01-01 00:00:00 UTC 起的秒數。配合 dostounix 可雙向轉換,利於日期運算 (如加減天數)。

long u = dostounix(&dt, &tm); // 取得當前 Unix 時間
u -= 86400L * 42;             // 減去 42 天
unixtodos(u, &dt, &tm);       // 轉回 DOS 結構

unlink — 刪除檔案

int unlink(const char *filename);

成功傳回 0,失敗傳回 -1 並設 errno。若檔案被開啟,行為視作業系統而定 (DOS 通常允許刪除開啟檔,Windows 則拒絕)。

FILE *fp = fopen("temp.tmp", "w");
fclose(fp);
unlink("temp.tmp");

unlock — 解除檔案區域鎖定

int unlock(int handle, long offset, long length);

釋放先前以 lock(handle, offset, length) 鎖定的檔案區域,允許其他程序存取。參數必須與 lock 完全一致。

int h = sopen("data.dat", O_RDWR, SH_DENYNO, S_IREAD|S_IWRITE);
lock(h, 0, 100);   // 鎖定前 100 位元組
/* 獨佔存取 */
unlock(h, 0, 100); // 釋放
close(h);

適用平台:上述函數多為 MS-DOS / Borland C / Microsoft C 經典擴充,現代跨平台建議使用 POSIX unlink, fcntl (鎖定)、strtoull (字串轉換) 等標準介面。

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