㈠ c語言函數參考手冊的目錄
第1章 動態內存管理函數:alloc.h 1
1.1 brk()——重置數據段存儲空間函數 2
1.2 coreleft()——獲取未使用內存大小
函數 3
1.3 farcalloc()——申請遠堆空間函數 4
1.4 farcoreleft()——獲取遠堆空閑存儲
空間大小函數 5
1.5 farfree()——釋放遠堆空間函數 6
1.6 farmalloc()——申請遠堆空間函數 6
1.7 farrealloc()——遠堆存儲塊空間調整
函數 7
1.8 sbrk()——增加數據段存儲空間函數 8
第2章 DEBUG相關函數庫:
assert.h 10
assert()——錯誤判斷函數 11
第3章 BIOS相關函數庫:bios.h 12
3.1 bioscom()——串列I/O通信函數 13
3.2 biosdisk()——軟硬碟I/O函數 14
3.3 biosequip()——檢查設備函數 15
3.4 bioskey()——鍵盤介面函數 16
3.5 biosmemory()——獲取存儲塊大小
函數 18
3.6 biostime()——設置bios時間函數 19
第4章 控制台輸入/輸出函數庫:
conio.h 21
4.1 cgets()——從控制台輸入字元串
函數 22
4.2 clreol()——清除字元到行末函數 22
4.3 clrscr()——清除文本模式窗口函數 23
4.4 cprintf()——格式化輸出到屏幕
函數 24
4.5 cputs()——字元串輸出到屏幕函數 25
4.6 cscanf()——格式化輸入函數 26
4.7 delline()——刪除行函數 27
4.8 getch()——無回顯字元輸入函數 28
4.9 getche()——有回顯字元輸入函數 28
4.10 getpass()——以密碼形式輸入
函數 29
4.11 gettext()——文本復制函數 30
4.12 gettextinfo()——獲取文本模式的
屏幕信息函數 31
4.13 gotoxy()——設置游標函數 32
4.14 highvideo()——高亮顯示文本
函數 33
4.15 insline()——插入空行函數 34
4.16 kbhit()——檢查鍵盤按鍵函數 35
4.17 lowvideo()——低亮顯示文本
函數 36
4.18 movetext()——移動屏幕文本
函數 37
4.19 normvideo()——正常亮顯示文本
函數 38
4.20 putch()——字元輸出函數 39
4.21 puttext()——文本復制函數 40
4.22 textattr()——設置文本屬性函數 41
4.23 textbackground()——文本背景色
選擇函數 42
4.24 textcolor()——文本字元顏色選擇
函數 43
4.25 textmode()——文本模式設置函數 43
4.26 ungetch()——把字元退回鍵盤緩沖
區函數 44
4.27 wherex()——返回水平游標位置
函數 45
4.28 wherey()——返回垂直游標位置
函數 46
4.29 window()——定義活動文本窗口
函數 47
第5章 字元函數庫:ctype.h 49
5.1 isascii()——判斷字元是否為ASCII碼
函數 50
5.2 isalnum()——判斷字元是否為字母或
數字函數 50
5.3 isalpha()——判斷字元是否為英文
字母函數 51
5.4 iscntrl()——判斷字元是否為控制
字元函數 52
5.5 isdigit()——判斷字元是否為十進制
數字函數 53
5.6 isgraph()——判斷字元是否為除空格
外的可列印字元函數 54
5.7 islower()——判斷字元是否為小寫
英文字母函數 55
5.8 isprint()——判斷字元是否為可列印
字元(含空格)函數 56
5.9 ispunct()——判斷字元是否為標點
符號函數 57
5.10 isspace()——判斷字元是否為空白
字元函數 57
5.11 isupper()——判斷字元是否為大寫
英文字母函數 58
5.12 isxdigit()——判斷字元是否為十六
進制數字函數 59
5.13 toascii()——將字元轉換為ASCII碼
函數 60
5.14 tolower()——將字元轉換為小寫
英文字母函數 61
5.15 toupper()——將字元轉換為大寫
英文字母函數 62
第6章 目錄操作函數庫:dir.h 63
6.1 chdir()——更改當前工作目錄函數 64
6.2 findfirst()——搜索當前磁碟目錄
函數 65
6.3 findnext()——搜索磁碟下一個匹配的
文件函數 66
6.4 fnmerge()——構造完整路徑函數 66
6.5 fnsplit()——拆分路徑函數 67
6.6 getcurdir()——獲取指定驅動器上的
工件目錄函數 69
6.7 getcwd()——獲取當前工作目錄
函數 69
6.8 getdisk()——獲取當前磁碟驅動器號
函數 70
6.9 mkdir()——建立目錄函數 71
6.10 mktemp()——生成不重復文件名
函數 72
6.11 rmdir()——刪除文件目錄函數 73
6.12 setdisk()——設置當前工作驅動器
函數 73
6.13 searchpath()——查找文件函數 74
第7章 系統介面函數庫:dos.h 76
7.1 allocmem()——DOS分配存儲段
函數 77
7.2 bdos()——DOS系統調用函數 78
7.3 country()——返回國家相關信息
函數 79
7.4 ctrlbrk()——設置Ctrl-Break處理
程序函數 80
7.5 delay()——以毫秒為單位的延時
函數 81
7.6 dosexterr()——獲取擴展DOS錯誤
信息函數 82
7.7 dostounix()——把DOS時間轉換為UNIX時間 83
7.8 FP_OFF()——獲取遠指針的偏
移量 84
7.9 FP_SEG()——獲取遠指針的段
地址 85
7.10 freemem()——釋放已分配DOS內
存塊函數 86
7.11 getcbrk()——獲取Ctrl-Break設置
函數 87
7.12 getdate()——獲取DOS日期函數 88
7.13 getdta()——獲取磁碟傳輸地址
函數 89
7.14 gettime()——獲取系統時間函數 90
7.15 inport()——從硬體埠中輸入一個
字函數 91
7.16 inportb()——從硬體埠中輸入
一個位元組函數 92
7.17 int86()——通用8086軟中斷介面
函數 93
7.18 int86x()——增強型通用8086軟
中斷介面函數 94
7.19 intdos()——通用DOS中斷介面
函數 95
7.20 intdosx()——增強型通用DOS中斷
介面函數 97
7.21 intr()——改變軟中斷介面函數 98
7.22 keep()——退出並繼續駐留函數 99
7.23 MK_FP()——遠指針合成 100
7.24 nosound()——關閉PC揚聲器
函數 101
7.25 outport()——從硬體埠中輸出
一個字函數 102
7.26 outportb()——從硬體埠中輸出
一個位元組函數 103
7.27 parsfnm()——分析文件名函數 104
7.28 peek()——從存儲單元讀一個字
函數 105
7.29 peekb()——從存儲單元讀一個位元組
的函數 106
7.30 poke()——存一個字到給定存儲
單元函數 108
7.31 pokeb()——存一個位元組到給定
存儲單元函數 109
7.32 randbrd()——隨機塊讀函數 110
7.33 randbwr()——隨機塊寫函數 111
7.34 segread()——讀段寄存器值函數 112
7.35 setblock()——修改DOS分配地址
函數 113
7.36 setcbrk()——設置Ctrl-Break
函數 114
7.37 setdate()——設置DOS日期函數 115
7.38 settime()——設置DOS時間函數 116
7.39 setdta()——設置磁碟傳輸地址
函數 117
7.40 sleep()——以秒為單位的延時
函數 118
7.41 sound()——打開PC揚聲器函數 119
7.42 unixtodos()——把UNIX時間轉換
為DOS時間函數 120
第8章 浮點數據處理函數庫:
float.h 122
8.1 _clear87()——清除狀態字函數 123
8.2 _control87()——設置控制字函數 124
8.3 _status87()——獲取浮點處理器狀態
值函數 125
第9章 圖形處理函數庫:
graphics.h 126
9.1 arc()——畫弧線函數 127
9.2 bar()——繪制二維條形圖函數 128
9.3 bar3d()——繪制三維條形圖函數 129
9.4 circle()——畫圓函數 130
9.5 cleardevice()——清除圖形屏幕
函數 131
9.6 clearviewport()——清除圖形視區
函數 132
9.7 closegraph()——關閉圖形系統
函數 133
9.8 detectgraph()——通過檢測硬體確定
圖形驅動程序和模式函數 134
9.9 drawpoly()——繪制多邊形函數 134
9.10 ellipse()——繪制橢圓函數 135
9.11 fillellipse()——繪制並填充橢圓
函數 137
9.12 fillpoly()——繪制多邊形並填充
函數 138
9.13 floodfill()——填充有界區域
函數 139
9.14 getarccoords()——取得最後一次
調用畫弧線坐標函數 140
9.15 getaspectratio()——獲取當前圖形
模式的縱橫比函數 141
9.16 getbkcolor()——獲取當前背景顏色
函數 142
9.17 getcolor()——獲取當前畫線顏色
函數 143
9.18 getdefaultpalette()——返回默認
調色板函數 144
9.19 getdrivername()——獲取圖形驅動
程序名函數 145
9.20 getfillpattern()——獲取用戶定義的
填充模式函數 146
9.21 getfillsettings()——獲取填充模式和
填充顏色函數 147
9.22 getgraphmode()——獲取當前圖形
模式函數 148
9.23 getimage()——將指定區域的點陣圖
調入內存函數 149
9.24 getlinesettings()——獲取當前線型、
模式和寬度函數 150
9.25 getmaxcolor()——獲取最大顏色
函數 151
9.26 getmaxmode()——獲取當前驅動
程序的最大圖形模式 152
9.27 getmaxx()——返回屏幕的最大
x坐標函數 153
9.28 getmaxy()——返回屏幕的最大
y坐標函數 154
9.29 getmodename()——獲取指定圖形
模式的名稱 155
9.30 getmoderange()——獲取給定圖形
驅動程序的模式范圍函數 156
9.31 getpixel()——獲取指定像素的顏色
函數 157
9.32 getpalette()——獲取調色板函數 158
9.33 getpalettesize()——獲取調色板的
顏色數函數 159
9.34 gettextsettings()——獲取當前圖形
文本字體的信息函數 160
9.35 getviewsettings()——獲取當前視口
的信息函數 161
9.36 getx()——獲取當前圖形位置的
x坐標函數 163
9.37 gety()——獲取當前圖形位置的
y坐標函數 164
9.38 graphdefaults()——將所有圖形設置
復位為它們的默認值函數 164
9.39 grapherrormsg()——返回一個錯誤
信息串的指針函數 165
9.40 _graphfreemem()——用戶可修改的
圖形存儲區釋放函數 166
9.41 _graphgetmem()——用戶可修改的
圖形存儲區分配函數 167
9.42 graphresult()——返回最後一次不成功的圖形操作的錯誤代碼函數 168
9.43 imagesize()——返回保存點陣圖像
所需的位元組數函數 169
9.44 initgraph()——初始化圖形系統
函數 170
9.45 line()——在指定兩點間畫直線
函數 172
9.46 linerel()——從當前位置點到相對位
移點繪制直線函數 173
9.47 lineto()——在從當前位置點到指定
點間畫直線函數 174
9.48 moverel()——將當前點移動到一
相對距離函數 175
9.49 moveto()——將當前點移動到(x,y)
函數 176
9.50 outtext()——在視區顯示字元串
函數 176
9.51 outtextxy()——在指定位置顯示
字元串函數 177
9.52 pieslice()——繪制扇形並填充
函數 178
9.53 putimage()——在屏幕上輸出點陣圖
函數 179
9.54 putpixel()——在指定位置繪制像素
函數 180
9.55 rectangle()——繪制矩形函數 181
9.56 restorecrtmode()——將屏幕模式恢復為先前的initgraph設置函數 182
9.57 sector()——繪制並填充橢圓扇區
函數 183
9.58 setactivepage()——設置圖形輸出
活動頁函數 184
9.59 setallpalette()——按指定方式改變
所有的調色板顏色函數 185
9.60 setaspectratio()——設置圖形縱橫比
函數 187
9.61 setbkcolor()——設置當前背景顏色
函數 187
9.62 setcolor()——設置當前畫線顏色
函數 188
9.63 setfillpattern()——選擇用戶定義的
填充模式函數 189
9.64 setfillstyle()——設置填充模式和
顏色函數 191
9.65 setgraphmode()——設置當前圖形
模式函數 192
9.66 setlinestyle()——設置當前畫線寬度
和類型函數 193
9.67 setpalette()——設置有關當前調色板
的信息函數 193
9.68 settextjustify()——設置文本的對齊
方式函數 194
9.69 settextstyle()——設置當前的文本
屬性函數 195
9.70 setusercharsize()——為矢量字體
改變字元寬度和高度函數 196
9.71 setviewport()——為圖形輸出設置
當前視口函數 197
9.72 setvisualpage()——設置可見圖形
頁號函數 198
9.73 setwritemode()——設置輸出
模式 198
9.74 textheight()——獲取以像素為單位
的字元串高度函數 200
9.75 textwidth()——獲取以像素為單位
的字元串寬度函數 201
第10章 輸入/輸出函數庫:io.h 203
10.1 access()——文件訪問許可權設置
函數 204
10.2 chmod()——改變文件訪問方式
函數 205
10.3 close()——關閉文件函數 206
10.4 creat()——創建文件函數 206
10.5 p()——復制文件句柄函數 208
10.6 eof()——文件檢測結束函數 209
10.7 fdopen()——連接文件句柄函數 210
10.8 filelength()——文件位元組數統計
函數 211
10.9 getftime——獲取文件時間函數 211
10.10 isatty()——設備類型檢查函數 212
10.11 lock()——文件共享鎖設置函數 213
10.12 lseek()——移動文件指針函數 214
10.13 open()——打開文件函數 216
10.14 read()——讀文件函數 217
10.15 setmode()——設置文件打開方式
函數 218
10.16 tell()——獲取文件指針位置
函數 219
10.17 unlock()——解除共享鎖函數 219
10.18 write()——寫文件函數 220
第11章 數學函數庫:math.h 221
11.1 abs()——整數絕對值函數 222
11.2 acos()——反餘弦值函數 223
11.3 asin()——反正弦值函數 224
11.4 atan()——反正切值函數 225
11.5 atan2()——X/Y反正切函數 226
11.6 ceil()——不小於某數的最小整數
函數 226
11.7 cos()——餘弦值函數 227
11.8 cosh()——雙曲餘弦值函數 228
11.9 exp()——e的次冪函數 229
11.10 fabs()——浮點數絕對值函數 230
11.11 floor()——不大於某數的最大整數
函數 231
11.12 fmod()——余數函數 232
11.13 frexp()——計算浮點數尾數和指數
函數 233
11.14 hypot()——計算直角三角形斜邊
長度函數 234
11.15 labs()——長整型絕對值函數 235
11.16 ldexp()——計算冪函數 235
11.17 log()——自然對數函數 236
11.18 log10()——對數函數 237
11.19 modf()——取浮點數小數部分
函數 238
11.20 pow()——計算x的y次冪函數 239
11.21 pow10()——計算10的x次冪
函數 240
11.22 sin()——正弦值函數 241
11.23 sinh()——雙曲正弦值函數 242
11.24 sqrt()——平方根函數 243
11.25 tan()——正切值函數 244
11.26 tanh()——雙曲正切值函數 245
第12章 內存相關函數庫:mem.h 246
12.1 memccpy()——位元組復制函數 247
12.2 memchr()——字元搜索函數 248
12.3 memcmp()——串比較函數 249
12.4 memcpy()——位元組復制函數 250
12.5 memicmp()——串比較函數 251
12.6 memmove()——位元組移動函數 252
12.7 memset()——串設置函數 253
第13章 進程管理函數庫:
process.h 254
13.1 spawnl()——創建並運行子程序
函數 255
13.2 spawnle()——創建並運行子程序
函數 256
第14章 函數跳轉函數庫:
setjmp.h 258
14.1 longjmp()——非局部轉移執行
函數 259
14.2 setjmp()——非局部轉移函數 260
第15章 標准庫函數庫:stdarg.h 262
15.1 va_arg()——調用可變參數列表
函數 263
15.2 va_end()——停止使用可變參數
函數 264
15.3 va_start()——開始使用可變參數
函數 265
15.4 vfprintf()——格式化輸出流函數 266
15.5 vfscanf()——執行流中格式化輸入
函數 267
15.6 vprintf()——格式化輸出函數 269
15.7 vsprintf()——格式化輸出串函數 270
15.8 vscanf()——執行格式化輸入
函數 271
15.9 vsscanf()——執行流中格式化輸入
函數 272
第16章 輸入/輸出庫:stdio.h 274
16.1 clearerr()——復位錯誤標志函數 275
16.2 fclose()——關閉流函數 276
16.3 feof()——檢測流上的文件結束符
函數 276
16.4 ferror()——檢測流上的錯誤
函數 277
16.5 fflush()——清除流函數 278
16.6 fgetc()——從流中讀取字元函數 279
16.7 fgetchar()——從流中讀取字元
函數 280
16.8 fgetpos()——取得當前文件句柄
函數 281
16.9 fgets()——從流中讀取字元函數 282
16.10 fopen()——打開流函數 283
16.11 fprintf()——將格式化內容輸出
到流函數 284
16.12 fputchar()——輸出字元到標准
輸出流(stdout)函數 285
16.13 fputs()——送字元串到流中
函數 286
16.14 fread()——從流中讀數據函數 287
16.15 freopen()——替換流函數 288
16.16 fscanf()——從流中執行格式化
輸入內容函數 289
16.17 fseek()——重定位流上的文件
指針函數 290
16.18 fsetpos()——定位流上的文件
指針函數 291
16.19 ftell()——返回當前文件指針
函數 292
16.20 fwrite()——寫內容到流函數 293
16.21 getc()——從流中取字元函數 294
16.22 getchar()——從stdin流中讀字元
函數 295
16.23 getche()——從控制台取字元
(帶回顯)函數 296
16.24 gets()——從流中取字元函數 297
16.25 getw()——從流中取整數函數 298
16.26 perror()——系統錯誤信息 299
16.27 printf()——格式化輸出函數 300
16.28 putc()——輸出一個字元到流中
函數 301
16.29 putchar()——在stdout上輸出
字元函數 301
16.30 puts()——將字元串送到流中
函數 302
16.31 putw()——將字元或字送到流中
函數 303
16.32 rename()——重命名文件函數 305
16.33 remove()——刪除文件函數 305
16.34 rewind()——將文件指針重新指向
流的開頭函數 306
16.35 scanf()——格式化輸入函數 307
16.36 setbuf()——把緩沖區與流相聯
函數 308
16.37 setvbuf()——把緩沖區與流相關
函數 309
16.38 sprintf()——將格式化數據輸出到
字元串中函數 310
16.39 sscanf()——執行字元串中的格式化輸入函數 311
16.40 tmpfile()——以二進制方式打開
暫存文件函數 312
16.41 tmpnam()——創建一個唯一的
文件名函數 313
16.42 ungetc()——把字元退回到輸入
流函數 314
16.43 ungetch()——把字元退回到鍵盤
緩沖區函數 315
第17章 標准工具庫函數庫:
stdlib.h 317
17.1 abort()——異常終止進程函數 318
17.2 atexit()——注冊終止函數 318
17.3 atof()——轉換字元串函數 319
17.4 atoi()——轉換字元串函數 320
17.5 atol()——轉換字元串函數 321
17.6 bsearch()——二分法搜索函數 322
17.7 calloc()——分配主存儲器函數 323
17.8 div()——整數相除函數 324
17.9 ecvt()——轉換浮點數函數 325
17.10 exit()——終止程序函數 326
17.11 fcvt()——轉換浮點數函數 327
17.12 free()——釋放已分配塊函數 328
17.13 gcvt()——轉換浮點數函數 329
17.14 getenv()——獲取環境中字元串
函數 330
17.15 itoa()——轉換整數函數 331
17.16 ldiv()——長整型數相除函數 332
17.17 lfind()——線性搜索函數 333
17.18 lsearch()——線性搜索函數 334
17.19 malloc()——內存分配函數 335
17.20 putenv()——載入環境中字元串
函數 336
17.21 qsort()——快速排序函數 338
17.22 rand()——隨機數發生器函數 339
17.23 random()——隨機數發生器
函數 340
17.24 randomize()——隨機數發生器
函數 340
17.25 realloc()——重新分配主存函數 341
17.26 srand()——初始化隨機數發生器
函數 342
17.27 strtod()——轉換字元串函數 343
17.28 strtol()——轉換字元串函數 344
17.29 swab()——交換位元組函數 345
17.30 system()——發出DOS命令
函數 346
第18章 信號定義函數庫:
signal.h 347
18.1 raise()——發送信號函數 348
18.2 signal()——設置信號對應動作
函數 348
第19章 字元串函數庫:string.h 350
19.1 movmem()——從源字元中移動位元組
到目標字元函數 351
19.2 setmem()——把內存區域的位元組
設置成字元函數 352
19.3 stpcpy()——把字元串復制到數組
函數 353
19.4 strcat()——字元串追加函數 354
19.5 strchr()——查找字元串首次出現
位置函數 355
19.6 strcmp()——字元串比較函數 356
19.7 strcmpi()——字元串比較(不區分
大小寫)函數 357
19.8 strcpy()——復制字元串到數組
函數 357
19.9 strcspn()——字元串查找函數 358
19.10 strp()——字元串復制函數 359
19.11 stricmp()——字元串比較(不區分
大小寫)函數 360
19.12 strlen()——字元串長度函數 361
19.13 strlwr()——將字元串轉換為小寫
形式函數 362
19.14 strncat()——字元串尾部追加
函數 362
19.15 strncmp()——字元串比較函數 363
19.16 strncmpi()——字元串比較(不區
分大小寫)函數 364
19.17 strncpy()——將字元串復制到數組
函數 365
19.18 strnicmp()——字元串比較(不區分
大小寫)函數 366
19.19 strpbrk()——字元串查找函數 367
19.20 strrev()——字元串倒序函數 368
19.21 strset()——將字元串設置成指定
字元函數 369
19.22 strstr()——在字元串中查找指定
字元首次出現位置函數 370
19.23 strtok()——用分隔符分解字元串
函數 371
19.24 strupr()——將字元串轉換為大寫
形式函數 372
第20章 時間函數庫:time.h 373
20.1 asctime()——日期和時間轉換
函數 374
20.2 clock()——測定運行時間函數 375
20.3 ctime()——轉換日期和時間為字元
串函數 376
20.4 difftime()——計算時間差函數 376
20.5 gmtime()——獲取格林尼治結構的
時間函數 377
20.6 localtime()——獲取tm結構的系統
時間函數 378
20.7 time()——獲取或設置時間函數 379
20.8 tzset()——UNIX時間兼容函數 380
㈡ C語言編寫"全盤搜索一個文件"的程序
用C++遍歷目錄
河南洛陽 祝曉鷹
--------------------------------------------------------------------------------
---- 所謂遍歷目錄,就是給定一個目錄,訪問其中的所有文件(包括子目錄下的文件)。迭代是比較常用的遍歷演算法。本文利用C++面向對象的特性,通過一個類CBrowseDir,對目錄遍歷進行了封裝。用戶只需掌握該類四個成員函數的用法,就可以在自己的程序中,很方便地實現目錄遍歷。
---- 類CBrowseDir使用了迭代演算法。因為演算法不是本文重點,筆者不打算展開進一步討論,對其感興趣者可參考相關資料。
一、類成員函數說明:
---- bool SetInitDir(const char *dir);
---- 功能:設置要遍歷的目錄。
---- 參數:dir 指向要遍歷的目錄,可以使用相對路徑,比如"d:..\hawk";還可以使用網路路徑,比如"\\wf\d\hawk"(其中wf是主機名,d是共享目錄,hawk是目錄)。
---- 返回值:返回true,表示設置成功;返回false,說明目錄不可用。
---- bool BeginBrowse(const char *filespec);
---- 功能:開始遍歷目錄中由filespec指定的文件(包括隱藏文件)。
---- 參數:filespec 指定文件類型,可以使用通配符*和?,比如"*.exe"或"a?.*"都是合法參數。注意:filespec中不能包含路徑,象"hawk\*.*"是錯誤的。
---- 返回值:函數返回true,表明已順利遍歷完所有文件;返回false,遍歷過程被用戶中止。
---- virtual bool ProcessFile(const char *filename);
---- 功能:虛函數。每找到一個文件,程序就會調用ProcessFile,並把文件名作為參數傳遞給函數。如果函數返回false,則強制遍歷中止,並導致類成員函數函數BeginBrowse返回false。 用戶應該覆寫此函數,以加入自己的處理代碼。
---- 參數:filename 指向一個文件名。注意:filename使用絕對路徑。
---- 返回值:返回true,繼續遍歷;否則,中止遍歷。
---- virtual void ProcessDir (const char *currentdir,const char *parentdir);
---- 功能:虛函數。在遍歷過程中,每進入一個子目錄,程序就會調用ProcessDir,並把目錄名及其上一級目錄名作為參數傳遞給函數。如果該目錄是成員函數SetInitDir指定的初始目錄,則parentdir=NULL。用戶可以覆寫此函數,以加入自己的處理代碼。比如可以在這里統計子目錄的個數。
---- 參數:currentdir 指向一個子目錄。
---- parentdir 指向currentdir的父目錄。
---- 注意:currentdir和parentdir均使用絕對路徑。
二、使用:
---- 把類CBrowseDir的頭文件BrowseDir.h及實現文件BrowseDir.cpp加到項目(Project)中,然後派生自己的類並覆寫虛函數ProcessFile和ProcessDir。遍歷目錄時,先構造一個派生類對象,用成員函數SetInitDir指定目錄,然後調用BeginBrowse開始遍歷。
---- 本文提供了一個例子 example.cpp,它從CBrowseDir派生出子類CStatDir,通過統計函數ProcessFile及ProcessDir的調用次數,可以得知目錄中的文件及子目錄個數。程序都有注釋,這里就不再羅嗦了。
三、注意事項:
---- 1. 類CBrowseDir會改變當前工作目錄。同一個相對路徑,使用CBrowseDir前後,可能會有不同的含義。因此用戶編程時,要小心使用相對路徑。
---- 2. 如果項目(Project)是一個MFC應用程序,直接加入BrowseDir.h及BrowseDir.cpp會導致編譯出錯。這是因為預設情況下,MFC項目使用了預編譯頭(Precompiled Header),而BrowseDir.h和BrowseDir.cpp是用標准C++語句編寫的,沒用預編譯。一個解決辦法是先用類向導生成類CBrowseDir的"架子",再把相應的代碼拷貝過去。
---- 本文代碼均在Win95、Visual C++ 5.0環境下調試通過。
附源代碼:
/**************************************************
這是CBrowseDir的類定義文件 BrowseDir.h
/**************************************************
#include "stdlib.h"
class CBrowseDir
{
protected:
//存放初始目錄的絕對路徑,以'\'結尾
char m_szInitDir[_MAX_PATH];
public:
//預設構造器
CBrowseDir();
//設置初始目錄為dir,如果返回false,表示目錄不可用
bool SetInitDir(const char *dir);
//開始遍歷初始目錄及其子目錄下由filespec指定類型的文件
//filespec可以使用通配符 * ?,不能包含路徑。
//如果返回false,表示遍歷過程被用戶中止
bool BeginBrowse(const char *filespec);
protected:
//遍歷目錄dir下由filespec指定的文件
//對於子目錄,採用迭代的方法
//如果返回false,表示中止遍歷文件
bool BrowseDir(const char *dir,const char *filespec);
//函數BrowseDir每找到一個文件,就調用ProcessFile
//並把文件名作為參數傳遞過去
//如果返回false,表示中止遍歷文件
//用戶可以覆寫該函數,加入自己的處理代碼
virtual bool ProcessFile(const char *filename);
//函數BrowseDir每進入一個目錄,就調用ProcessDir
//並把正在處理的目錄名及上一級目錄名作為參數傳遞過去
//如果正在處理的是初始目錄,則parentdir=NULL
//用戶可以覆寫該函數,加入自己的處理代碼
//比如用戶可以在這里統計子目錄的個數
virtual void ProcessDir(const char
*currentdir,const char *parentdir);
};
/*********************************************/
這是CBrowseDir的類實現文件 BrowseDir.cpp
/***********************************************/
#include "stdlib.h"
#include "direct.h"
#include "string.h"
#include "io.h"
#include "browsedir.h"
CBrowseDir::CBrowseDir()
{
//用當前目錄初始化m_szInitDir
getcwd(m_szInitDir,_MAX_PATH);
//如果目錄的最後一個字母不是'\',則在最後加上一個'\'
int len=strlen(m_szInitDir);
if (m_szInitDir[len-1] != '\\')
strcat(m_szInitDir,"\\");
}
bool CBrowseDir::SetInitDir(const char *dir)
{
//先把dir轉換為絕對路徑
if (_fullpath(m_szInitDir,dir,_MAX_PATH) == NULL)
return false;
//判斷目錄是否存在
if (_chdir(m_szInitDir) != 0)
return false;
//如果目錄的最後一個字母不是'\',則在最後加上一個'\'
int len=strlen(m_szInitDir);
if (m_szInitDir[len-1] != '\\')
strcat(m_szInitDir,"\\");
return true;
}
bool CBrowseDir::BeginBrowse(const char *filespec)
{
ProcessDir(m_szInitDir,NULL);
return BrowseDir(m_szInitDir,filespec);
}
bool CBrowseDir::BrowseDir
(const char *dir,const char *filespec)
{
_chdir(dir);
//首先查找dir中符合要求的文件
long hFile;
_finddata_t fileinfo;
if ((hFile=_findfirst(filespec,&fileinfo)) != -1)
{
do
{
//檢查是不是目錄
//如果不是,則進行處理
if (!(fileinfo.attrib & _A_SUBDIR))
{
char filename[_MAX_PATH];
strcpy(filename,dir);
strcat(filename,fileinfo.name);
if (!ProcessFile(filename))
return false;
}
} while (_findnext(hFile,&fileinfo) == 0);
_findclose(hFile);
}
//查找dir中的子目錄
//因為在處理dir中的文件時,派生類的ProcessFile有可能改變了
//當前目錄,因此還要重新設置當前目錄為dir。
//執行過_findfirst後,可能系統記錄下了相關信息,因此改變目錄
//對_findnext沒有影響。
_chdir(dir);
if ((hFile=_findfirst("*.*",&fileinfo)) != -1)
{
do
{
//檢查是不是目錄
//如果是,再檢查是不是 . 或 ..
//如果不是,進行迭代
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name,".") != 0 && strcmp
(fileinfo.name,"..") != 0)
{
char subdir[_MAX_PATH];
strcpy(subdir,dir);
strcat(subdir,fileinfo.name);
strcat(subdir,"\\");
ProcessDir(subdir,dir);
if (!BrowseDir(subdir,filespec))
return false;
}
}
} while (_findnext(hFile,&fileinfo) == 0);
_findclose(hFile);
}
return true;
}
bool CBrowseDir::ProcessFile(const char *filename)
{
return true;
}
void CBrowseDir::ProcessDir(const char
*currentdir,const char *parentdir)
{
}
/*************************************************
這是例子example.cpp
/*************************************************
#include "stdio.h"
#include "BrowseDir.h"
//從CBrowseDir派生出的子類,用來統計目錄中的文件及子目錄個數
class CStatDir:public CBrowseDir
{
protected:
int m_nFileCount; //保存文件個數
int m_nSubdirCount; //保存子目錄個數
public:
//預設構造器
CStatDir()
{
//初始化數據成員m_nFileCount和m_nSubdirCount
m_nFileCount=m_nSubdirCount=0;
}
//返迴文件個數
int GetFileCount()
{
return m_nFileCount;
}
//返回子目錄個數
int GetSubdirCount()
{
//因為進入初始目錄時,也會調用函數ProcessDir,
//所以減1後才是真正的子目錄個數。
return m_nSubdirCount-1;
}
protected:
//覆寫虛函數ProcessFile,每調用一次,文件個數加1
virtual bool ProcessFile(const char *filename)
{
m_nFileCount++;
return CBrowseDir::ProcessFile(filename);
}
//覆寫虛函數ProcessDir,每調用一次,子目錄個數加1
virtual void ProcessDir
(const char *currentdir,const char *parentdir)
{
m_nSubdirCount++;
CBrowseDir::ProcessDir(currentdir,parentdir);
}
};
void main()
{
//獲取目錄名
char buf[256];
printf("請輸入要統計的目錄名:");
gets(buf);
//構造類對象
CStatDir statdir;
//設置要遍歷的目錄
if (!statdir.SetInitDir(buf))
{
puts("目錄不存在。");
return;
}
//開始遍歷
㈢ 求C語言的常用函數,詳細一點
C語言的常用庫函數
函數1。absread()讀磁碟絕對扇區函數
函數2。abswrite()寫磁碟絕對扇區函數
函數3。atof()將字元串轉換成浮點數的函數
函數4。atoi()將字元串轉換成整型數的函數
函數5。atol()將字元串轉換成長整型數的函數
函數6。bcd()把一個數轉換成對應的BCD碼的函數
函數7。bdos()
函數8。biosdisk()調用BIOS磁碟驅動程序函數
函數9。biosprint()調用BIOS列印機I/O介面的函數
函數10。calloc()分配內存函數
函數11。ceil()
函數12。cgets()讀字元串函數
函數13。chdir()改變當前目錄的函數
函數14。_chmod()改變文件存取許可權的函數
函數15。chmod()改變文件存取許可權的函數
函數16。clock()
函數17。close()關閉文件函數
函數18。closegraph()關閉圖形函數
函數19。cos()
函數20。ctrlbrk()設置ctrl-break處理程序的函數
函數21。delay()暫停函數
函數22。disable()屏蔽中斷的宏
函數23。enable()開硬體中斷的宏
函數24。exec()載入並運行其它程序的函數族
函數25。farcalloc()從遠堆中分配內存的函數
函數26。farfree()從遠堆中釋放一塊已分配內存的函數
函數27。farmalloc()從遠堆中分配內存的函數
函數28。farrealloc()調整遠堆中已分配塊的函數
函數29。fclose()關閉一個流函數
函數30。fcloseall()關閉打開的流的函數
函數31。feof()檢查文件是否結束的函數
函數32。fgets()從流中讀取一字元串的函數
函數33。findfirst()函數和findnext()函數
函數34。floodfill()填充區域的函數
函數35。floor()
函數36。fnmerge()建立文件路徑函數
函數37。fnsplit()分解完整的路徑名函數
函數38。fopen()打開一個流函數
函數39。FP_OFF()獲取遠地址偏移量的宏
函數40。fprintf()傳送輸出到一個流中的函數
函數41。FP_SEG()獲取遠地址段值的宏
函數42。fscanf()格式化輸入函數
函數43。fseek()移動文件指針函數
函數44。fwrite()把參數寫入流中的函數
函數45。gcvt()把雙精度數轉化成字元串的函數
函數46。geninterrupt()執行中斷函數
函數47。getc()從流中取字元的宏
函數48。getch()從鍵盤無回顯地讀取一字元的函數
函數49。getchar()從stdin流中讀取一個字元的函數
函數50。getcurdir()讀取指定驅動器的當前目錄的函數
函數61。getcwd()讀取當前目錄的函數
函數62。getdate()讀取系統日期函數
函數63。getdfree()讀取磁碟空閑空間的函數
函數64。getdisk()讀取當前磁碟驅動器號函數
函數65。getenv()讀取環境變數的當前值的函數
函數66。getimage()將指定區域的點陣圖象存入內存的函數
函數67。getmaxx()返回屏幕上最大的X坐標值的函數
函數68。getmaxy()返回屏幕上最大的Y坐標值的函數
函數69。getpixel()讀取像素顏色的函數
函數70。getpsp()
函數71。gets()從標准輸入流stdio中讀取一字元串的函數
函數72。gettime()讀取系統時間的函數
函數73。getvect()讀取中斷向量函數
函數74。getx()返回當前圖形方式下位置的X坐標值的函數
函數75。gety()返回當前圖形方式下位置的Y坐標值的函數
函數76。imagesize()返回保存圖像緩沖區大小的函數
函數77。initgraph()顯示模式控制函數(初始化圖形系統函數)
函數78。inport()從埠中讀入一個字的函數
函數79。inportb()從埠讀入一個位元組的函數
函數80。int86()執行中斷函數(調用8086軟中斷函數)
函數81。int86x()執行中斷函數 (通用8086軟中斷介面函數)
函數82。intdos()通用dos中斷介面函數
函數83。intdosx()通用dos中斷介面函數
函數84。intr()執行8086軟中斷函數(改變軟中斷介面函數)
函數85。itoa()把整形數轉換為字元串的函數
函數86。kbhit()檢查當前按下的鍵的函數
函數87。keep()駐留並退出函數
函數88。log()
函數89。log10()
函數90。_lrotl()將一個無符號長整形數左循環移位的函數
函數91。_lrotr()將一個無符號長整形數右循環移位的函數
函數92。lseek()移動文件指針函數
函數93。ltoa()把長整形數轉換為字元串的函數
函數94。malloc()分配內存函數
函數95。mkdir()創建目錄函數
函數96。mktemp()建立一個唯一的文件名的函數
函數97。MK_FP()設置一個遠指針的宏
函數98。movedata()拷貝數據函數
函數99。_open()打開一個文件進行讀寫的函數
函數100。open()打開文件進行讀寫的函數
函數101。outport()輸出一個字到埠中的函數
函數102。outportb()輸出一個位元組到埠中的函數
函數103。outtextxy()在指定位置顯示一字元串的函數
函數104。peek()返回指定內存中字的函數
函數105。peekb()返回指定內存中位元組的函數
函數106。poke()在指定的內存中存儲一個字的函數
函數107。pokeb()在指定的內存中存儲一個位元組的函數
函數108。pow()
函數109。printf()寫格式化輸出到stdout的函數
函數110。putch()向屏幕輸出字元的函數
函數111。putchar()在stdout上輸出字元的宏
函數112。putenv()將字元串放入當前環境中的函數
函數113。putimage()重新寫屏函數(輸出一個點陣圖象到圖形屏幕上的函數)
函數114。putpixel()寫像素點函數
函數115。puts()輸出一字元串到stdout(標准輸出)的函數
函數116。_read()讀文件函數
函數117。read()讀文件函數
函數118。realloc()重新分配內存函數
函數119。rectangle()畫一個矩形的函數
函數120。remove()刪除一個文件的函數
函數121。rename()文件改名函數
函數122。restorecrtmode()恢復屏幕視頻模式為調用initgraph前的設置的函數
函數123。rmdir()刪除目錄函數
函數124。_rotl()將一個無符號整形數左循環移位的函數
函數125。_rotr()將一個無符號整形數右循環移位的函數
函數126。scanf()格式化輸入函數
函數127。searchpath()按dos路徑查找一個文件的函數
函數128。segread()讀段寄存器函數
函數129。setactivepage()設置圖形輸出活動頁的函數
函數130。setcolor()設置當前要畫的線顏色的函數
函數131。setdisk()設置當前驅動器的函數
函數132。setgraphmode()將系統設置成圖形模式並清屏的函數
函數133。setlinestyle()設置當前畫線寬度和類型的函數
函數134。settextstyle()顯示字元的當前設置函數
函數135。setvect()設置中斷向量函數
函數136。setviewport()建立視口的函數
函數137。setvisualpage()設置可見的圖形頁號的函數
函數138。sin()
函數139。sprintf()格式化輸出到數組的函數
函數140。strcat()
函數141。tan()
函數142。_write()寫文件函數
函數143。write()寫文件函數
原文釋義請到網路文庫里搜尋字串「C語言常用函數」後下載
函數51-60因原注里排序號碼少編,所以只有133個常用函數。
DOC大小是119.5KB
貢獻時間:2010-09-10
貢獻者:handanlinzhang
㈣ 求C語言庫函數大全!請大家幫忙!謝了!
int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否則返回0
int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或數字('0'-'9')
返回非0值,否則返回0
int isascii(int ch) 若ch是字元(ASCII碼中的0-127)返回非0值,否則返回0
int iscntrl(int ch) 若ch是作廢字元(0x7F)或普通控制字元(0x00-0x1F)
返回非0值,否則返回0
int isdigit(int ch) 若ch是數字('0'-'9')返回非0值,否則返回0
int isgraph(int ch) 若ch是可列印字元(不含空格)(0x21-0x7E)返回非0值,否則返回0
int islower(int ch) 若ch是小寫字母('a'-'z')返回非0值,否則返回0
int isprint(int ch) 若ch是可列印字元(含空格)(0x20-0x7E)返回非0值,否則返回0
int ispunct(int ch) 若ch是標點字元(0x00-0x1F)返回非0值,否則返回0
int isspace(int ch) 若ch是空格(' '),水平製表符('\t'),回車符('\r'),
走紙換行('\f'),垂直製表符('\v'),換行符('\n')
返回非0值,否則返回0
int isupper(int ch) 若ch是大寫字母('A'-'Z')返回非0值,否則返回0
int isxdigit(int ch) 若ch是16進制數('0'-'9','A'-'F','a'-'f')返回非0值,
否則返回0
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應的大寫字母('A'-'Z')
========數學函數(原型聲明所在頭文件為math.h、stdlib.h、string.h、float.h)===========
int abs(int i) 返回整型參數i的絕對值
double cabs(struct complex znum) 返回復數znum的絕對值
double fabs(double x) 返回雙精度參數x的絕對值
long labs(long n) 返回長整型參數n的絕對值
double exp(double x) 返回指數函數ex的值
double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存貯在eptr中
double ldexp(double value,int exp); 返回value*2exp的值
double log(double x) 返回logex的值
double log10(double x) 返回log10x的值
double pow(double x,double y) 返回xy的值
double pow10(int p) 返回10p的值
double sqrt(double x) 返回x的開方
double acos(double x) 返回x的反餘弦cos-1(x)值,x為弧度
double asin(double x) 返回x的反正弦sin-1(x)值,x為弧度
double atan(double x) 返回x的反正切tan-1(x)值,x為弧度
double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x為弧度
double cos(double x) 返回x的餘弦cos(x)值,x為弧度
double sin(double x) 返回x的正弦sin(x)值,x為弧度
double tan(double x) 返回x的正切tan(x)值,x為弧度
double cosh(double x) 返回x的雙曲餘弦cosh(x)值,x為弧度
double sinh(double x) 返回x的雙曲正弦sinh(x)值,x為弧度
double tanh(double x) 返回x的雙曲正切tanh(x)值,x為弧度
double hypot(double x,double y) 返回直角三角形斜邊的長度(z),
x和y為直角邊的長度,z2=x2+y2
double ceil(double x) 返回不小於x的最小整數
double floor(double x) 返回不大於x的最大整數
void srand(unsigned seed) 初始化隨機數發生器
int rand() 產生一個隨機數並返回這個數
double poly(double x,int n,double c[])從參數產生一個多項式
double modf(double value,double *iptr)將雙精度數value分解成尾數和階
double fmod(double x,double y) 返回x/y的余數
double frexp(double value,int *eptr) 將雙精度數value分成尾數和階
double atof(char *nptr) 將字元串nptr轉換成浮點數並返回這個浮點數
double atoi(char *nptr) 將字元串nptr轉換成整數並返回這個整數
double atol(char *nptr) 將字元串nptr轉換成長整數並返回這個整數
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *gcvt(double value,int ndigit,char *buf)
將數value轉換成字元串並存於buf中,並返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無符號整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *ltoa(long value,char *string,int radix)
將長整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *itoa(int value,char *string,int radix)
將整數value轉換成字元串存入string,radix為轉換時所用基數
double atof(char *nptr) 將字元串nptr轉換成雙精度數,並返回這個數,錯誤返回0
int atoi(char *nptr) 將字元串nptr轉換成整型數, 並返回這個數,錯誤返回0
long atol(char *nptr) 將字元串nptr轉換成長整型數,並返回這個數,錯誤返回0
double strtod(char *str,char **endptr)將字元串str轉換成雙精度數,並返回這個數,
long strtol(char *str,char **endptr,int base)將字元串str轉換成長整型數,
並返回這個數,
int matherr(struct exception *e)
用戶修改數學錯誤返回信息函數(沒有必要使用)
double _matherr(_mexcep why,char *fun,double *arg1p,
double *arg2p,double retval)
用戶修改數學錯誤返回信息函數(沒有必要使用)
unsigned int _clear87() 清除浮點狀態字並返回原來的浮點狀態
void _fpreset() 重新初使化浮點數學程序包
unsigned int _status87() 返回浮點狀態字
============目錄函數(原型聲明所在頭文件為dir.h、dos.h)================
int chdir(char *path) 使指定的目錄path(如:"C:\\WPS")變成當前的工作目錄,成
功返回0
int findfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的文件,成功
返回0
pathname為指定的目錄名和文件名,如"C:\\WPS\\TXT"
ffblk為指定的保存文件信息的一個結構,定義如下:
┏━━━━━━━━━━━━━━━━━━┓
┃struct ffblk ┃
┃{ ┃
┃ char ff_reserved[21]; /*DOS保留字*/┃
┃ char ff_attrib; /*文件屬性*/ ┃
┃ int ff_ftime; /*文件時間*/ ┃
┃ int ff_fdate; /*文件日期*/ ┃
┃ long ff_fsize; /*文件長度*/ ┃
┃ char ff_name[13]; /*文件名*/ ┃
┃} ┃
┗━━━━━━━━━━━━━━━━━━┛
attrib為文件屬性,由以下字元代表
┏━━━━━━━━━┳━━━━━━━━┓
┃FA_RDONLY 只讀文件┃FA_LABEL 卷標號┃
┃FA_HIDDEN 隱藏文件┃FA_DIREC 目錄 ┃
┃FA_SYSTEM 系統文件┃FA_ARCH 檔案 ┃
┗━━━━━━━━━┻━━━━━━━━┛
例:
struct ffblk ff;
findfirst("*.wps",&ff,FA_RDONLY);
int findnext(struct ffblk *ffblk) 取匹配finddirst的文件,成功返回0
void fumerge(char *path,char *drive,char *dir,char *name,char *ext)
此函數通過盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),擴展名ext(.EXE、.COM等)組成一個文件名
存與path中.
int fnsplit(char *path,char *drive,char *dir,char *name,char *ext)
此函數將文件名path分解成盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),擴展名ext(.EXE、.COM等),並分別存入相應的變數中.
int getcurdir(int drive,char *direc) 此函數返回指定驅動器的當前工作目錄名稱
drive 指定的驅動器(0=當前,1=A,2=B,3=C等)
direc 保存指定驅動器當前工作路徑的變數 成功返回0
char *getcwd(char *buf,iint n) 此函數取當前工作目錄並存入buf中,直到n個字
節長為為止.錯誤返回NULL
int getdisk() 取當前正在使用的驅動器,返回一個整數(0=A,1=B,2=C等)
int setdisk(int drive) 設置要使用的驅動器drive(0=A,1=B,2=C等),
返回可使用驅動器總數
int mkdir(char *pathname) 建立一個新的目錄pathname,成功返回0
int rmdir(char *pathname) 刪除一個目錄pathname,成功返回0
char *mktemp(char *template) 構造一個當前目錄上沒有的文件名並存於template中
char *searchpath(char *pathname) 利用MSDOS找出文件filename所在路徑,
,此函數使用DOS的PATH變數,未找到文件返回NULL
===========進程函數(原型聲明所在頭文件為stdlib.h、process.h)===========
void abort() 此函數通過調用具有出口代碼3的_exit寫一個終止信息於stderr,
並異常終止程序。無返回值
int exec…裝入和運行其它程序
int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)
int execle( char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int execlp( char *pathname,char *arg0,char *arg1,…,NULL)
int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])
int execv( char *pathname,char *argv[])
int execve( char *pathname,char *argv[],char *envp[])
int execvp( char *pathname,char *argv[])
int execvpe(char *pathname,char *argv[],char *envp[])
exec函數族裝入並運行程序pathname,並將參數
arg0(arg1,arg2,argv[],envp[])傳遞給子程序,出錯返回-1
在exec函數族中,後綴l、v、p、e添加到exec後,
所指定的函數將具有某種操作能力
有後綴 p時,函數可以利用DOS的PATH變數查找子程序文件。
l時,函數中被傳遞的參數個數固定。
v時,函數中被傳遞的參數個數不固定。
e時,函數傳遞指定參數envp,允許改變子進程的環境,
無後綴e時,子進程使用當前程序的環境。
void _exit(int status)終止當前程序,但不清理現場
void exit(int status) 終止當前程序,關閉所有文件,寫緩沖區的輸出(等待輸出),
並調用任何寄存器的"出口函數",無返回值
int spawn…運行子程序
int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnv( int mode,char *pathname,char *argv[])
int spawnve( int mode,char *pathname,char *argv[],char *envp[])
int spawnvp( int mode,char *pathname,char *argv[])
int spawnvpe(int mode,char *pathname,char *argv[],char *envp[])
spawn函數族在mode模式下運行子程序pathname,並將參數
arg0(arg1,arg2,argv[],envp[])傳遞給子程序.出錯返回-1
mode為運行模式
mode為 P_WAIT 表示在子程序運行完後返回本程序
P_NOWAIT 表示在子程序運行時同時運行本程序(不可用)
P_OVERLAY表示在本程序退出後運行子程序
在spawn函數族中,後綴l、v、p、e添加到spawn後,
所指定的函數將具有某種操作能力
有後綴 p時, 函數利用DOS的PATH查找子程序文件
l時, 函數傳遞的參數個數固定.
v時, 函數傳遞的參數個數不固定.
e時, 指定參數envp可以傳遞給子程序,允許改變子程序運行環境.
當無後綴e時,子程序使用本程序的環境.
int system(char *command) 將MSDOS命令command傳遞給DOS執行
======轉換子程序(函數原型所在頭文件為math.h、stdlib.h、ctype.h、float.h)========
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點數value轉換成字元串並返回該字元串
char *gcvt(double value,int ndigit,char *buf)
將數value轉換成字元串並存於buf中,並返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無符號整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *ltoa(long value,char *string,int radix)
將長整型數value轉換成字元串並返回該字元串,radix為轉換時所用基數
char *itoa(int value,char *string,int radix)
將整數value轉換成字元串存入string,radix為轉換時所用基數
double atof(char *nptr) 將字元串nptr轉換成雙精度數,並返回這個數,錯誤返回0
int atoi(char *nptr) 將字元串nptr轉換成整型數, 並返回這個數,錯誤返回0
long atol(char *nptr) 將字元串nptr轉換成長整型數,並返回這個數,錯誤返回0
double strtod(char *str,char **endptr)將字元串str轉換成雙精度數,並返回這個數,
long strtol(char *str,char **endptr,int base)將字元串str轉換成長整型數,
並返回這個數,
int toascii(int c) 返回c相應的ASCII
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應的小寫字母('a'-'z')
int _tolower(int ch) 返回ch相應的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應的大寫字母('A'-'Z')
int _toupper(int ch) 返回ch相應的大寫字母('A'-'Z')
㈤ c語言中如何得到當前文件所在位置
如果是通過open方式打開的,那麼第一個參數就是文件路徑信息:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *path, int oflag, /* mode_t mode */...);
如果是通過fopen方式打開的,那麼第一個參數就是文件路徑信息:
#include <stdio.h>
FILE *fopen(const char *filename, const char *mode);
無論通過open還是fopen打開文件,都必須先知道文件路徑信息,盡管可能是相對路徑。
如果知道了filename的內容,我們就可以定位它的絕對路徑,也就是你說的完全路徑。
1. filename本身就是絕對路徑,ok。
2. filename是相對路徑,那麼先通過getcwd獲取進程的執行路徑,然後再獲取絕對路徑即可。
#include <unistd.h>
extern char *getcwd(char *buf, size_t size);
但是,如果進程在打開文件後又執行了chdir、fchdir之類函數的話,估計就不能夠再獲取文件路徑信息了。
#include <unistd.h>
int chdir(const char *path);
int fchdir(int fildes);
㈥ c語言常用函數有哪些主要掌握的要點是什麼
標准頭文件包括:
<asset.h> <ctype.h> <errno.h> <float.h>
<limits.h> <locale.h> <math.h> <setjmp.h>
<signal.h> <stdarg.h> <stddef.h> <stdlib.h>
<stdio.h> <string.h> <time.h>
一、標準定義(<stddef.h>)
文件<stddef.h>里包含了標准庫的一些常用定義,無論我們包含哪個標准頭文件,<stddef.h>都會被自動包含進來。
這個文件里定義:
l 類型size_t (sizeof運算符的結果類型,是某個無符號整型);
l 類型ptrdiff_t(兩個指針相減運算的結果類型,是某個有符號整型);
l 類型wchar_t (寬字元類型,是一個整型,其中足以存放本系統所支持的所有本地環境中的字元集的所有編碼值。這里還保證空字元的編碼值為0);
l 符號常量NULL (空指針值);
l 宏offsetor (這是一個帶參數的宏,第一個參數應是一個結構類型,第二個參數應是結構成員名。
offsetor(s,m)求出成員m在結構類型t的變數里的偏移量)。
註:其中有些定義也出現在其他頭文件里(如NULL)。
二、錯誤信息(<errno.h>)
<errno.h>定義了一個int類型的表達式errno,可以看作一個變數,其初始值為0,一些標准庫函數執行中出錯時將它設為非0值,但任何標准庫函數都設置它為0。
<errno.h>里還定義了兩個宏EDOM和ERANGE,都是非0的整數值。數學函數執行中遇到參數錯誤,就會將errno置為EDOM,如出現值域錯誤就會將errno置為ERANGE。
三、輸入輸出函數(<stdio.h>)
文件打開和關閉:
FILE *fopen(const char *filename, const char *mode);
int fclose(FILE * stream);
字元輸入輸出:
int fgetc(FILE *fp);
int fputc(int c, FILE *fp);
getc和putc與這兩個函數類似,但通過宏定義實現。通常有下面定義:
#define getchar() getc(stdin)
#define putchar(c) putc(c, stdout)
int ungetc(int c, FILE* stream);//把字元 c 退迴流 stream
格式化輸入輸出:
int scanf(const char *format, ...);
int printf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int sscanf(char *s, const char *format, ...);
int sprintf(char *s, const char *format, ...);
行式輸入輸出:
char *fgets(char *buffer, int n, FILE *stream);
int fputs(const char *buffer, FILE *stream);
char *gets(char *s);
int puts(const char *s);
直接輸入輸出:
size_t fread(void *pointer, size_t size, size_t num, FILE *stream);
size_t fwrite(const void *pointer, size_t size, size_t num, FILE *stream);
㈦ 在C語言中有那些函數名
僅僅為了獲取函數名,就在函數體中嵌入硬編碼的字元串,這種方法單調乏味還易導致錯誤,不如看一下怎樣使用新的C99特性,在程序運行時獲取函數名吧.對象反射庫、調試工具及代碼分析器,經常會需要在運行時訪問函數的名稱,直到不久前,唯一能完成此項任務並且可移植的方法,是手工在函數體內嵌入一個帶有該函數名的硬編碼字元串,不必說,這種方法非常單調無奇,並且容易導致錯誤。本文將要演示怎樣使用新的C99特性,在運行時獲取函數名。
那麼怎樣以編程的方式從當前運行的函數中得到函數名呢?
答案是:使用__FUNCTION__ 及相關宏。
引出問題
通常,在調試中最讓人心煩的階段,是不斷地檢查是否已調用了特定的函數。對此問題的解決方法,一般是添加一個cout或printf()——如果你使用C語言,如下所示:
void myfunc()
{
cout<<"myfunc()"<<endl;
//其他代碼
}
通常在一個典型的工程中,會包含有數千個函數,要在每個函數中都加入一條這樣的輸出語句,無疑難過上「蜀山」啊,因此,需要有一種機制,可以自動地完成這項操作。
獲取函數名
作為一個C++程序員,可能經常遇到 __TIME__、__FILE__、__DATE__ 這樣的宏,它們會在編譯時,分別轉換為包含編譯時間、處理的轉換單元名稱及當前時間的字元串。
在最新的ISO C標准中,如大家所知的C99,加入了另一個有用的、類似宏的表達式__func__,其會報告未修飾過的(也就是未裁剪過的)、正在被訪問的函數名。請注意,__func__不是一個宏,因為預處理器對此函數一無所知;相反,它是作為一個隱式聲明的常量字元數組實現的:
static const char __func__[] = "function-name";
在function-name處,為實際的函數名。為激活此特性,某些編譯器需要使用特定的編譯標志,請查看相應的編譯器文檔,以獲取具體的資料。
有了它,我們可免去大多數通過手工修改,來顯示函數名的苦差事,以上的例子可如下所示進行重寫:
void myfunc()
{
cout<<"__FUNCTION__"<<endl;
}
官方C99標准為此目的定義的__func__標識符,確實值得大家關注,然而,ISO C++卻不完全支持所有的C99擴展,因此,大多數的編譯器提供商都使用 __FUNCTION__ 取而代之,而 __FUNCTION__ 通常是一個定義為 __func__ 的宏,之所以使用這個名字,是因為它已受到了大多數的廣泛支持。
在Visual Studio 2005中,默認情況下,此特性是激活的,但不能與/EP和/P編譯選項同時使用。請注意在IDE環境中,不能識別__func__ ,而要用__FUNCTION__ 代替。
Comeau的用戶也應使用 __FUNCTION__ ,而不是 __func__ 。
C++ BuilderX的用戶則應使用稍稍不同的名字:__FUNC__ 。
GCC 3.0及更高的版本同時支持 __func__ 和__FUNCTION__ 。
一旦可自動獲取當前函數名,你可以定義一個如下所示顯示任何函數名的函數:
void show_name(const char * name)
{
cout<<name<<endl;
}
void myfunc()
{
show_name(__FUNCTION__); //輸出:myfunc
}
void foo()
{
show_name(__FUNCTION__); //輸出:foo
}
因為 __FUNCTION__ 會在函數大括弧開始之後就立即初始化,所以,foo()及myfunc()函數可在參數列表中安全地使用它,而不用擔心重載。
簽名與修飾名
__FUNCTION__ 特性最初是為C語言設計的,然而,C++程序員也會經常需要有關他們函數的額外信息,在Visual Studio 2005中,還支持另外兩種非標準的擴展特性:__FUNCDNAME__ 與 __FUNCSIG__ ,其分別轉譯為一個函數的修飾名與簽名。函數的修飾名非常有用,例如,在你想要檢查兩個編譯器是否共享同樣的ABI時,就可派得上用場,另外,它還能幫助你破解那些含義模糊的鏈接錯誤,甚至還可用它從一個DLL中調用另一個用C++鏈接的函數。在下例中,show_name()報告了函數的修飾名:
void myfunc()
{
show_name(__FUNCDNAME__); //輸出:?myfunc@@YAXXZ
}
一個函數的簽名由函數名、參數列表、返回類型、內含的命名空間組成。如果它是一個成員函數,它的類名和const/volatile限定符也將是簽名的一部分。以下的代碼演示了一個獨立的函數與一個const成員函數簽名間的不同之處,兩個函數的名稱、返回類型、參數完全相同:
void myfunc()
{
show_name(__FUNCSIG__); // void __cdecl myfunc(void)
}
struct S
{
void myfunc() const
{
show_name(__FUNCSIG__); //void __thiscall S::myfunc(void) const
}
};