- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
 |
< align=center><FONT color=#0000ff size=3><B><FONT color=#cc0000>函数大全(m开头)</FONT></B></FONT></P>
; K5 @4 l' h! |; Q/ {( j! ^+ o< align=left><FONT color=#ff0000>main()主函数5 W5 P, a; l8 O9 P+ T% T' |1 e
</FONT>每一C 程序都 <B><FONT color=#000000>必须</FONT></B> 有一<FONT color=#ff0000><B>main()</B></FONT>函数, 可以根据自己的爱好把它放在程序的某 9 R' r8 ]$ ^9 {
个地方。有些程序员把它放在最前面, 而另一些程序员把它放在最后面, 无论放
# m- y: f' D& i7 M在哪个地方, 以下几点说明都是适合的。 ) ~9 j$ W& a/ y6 Y
<FONT color=#000099>1. main() 参数 </FONT>
" O s1 m4 k0 U( h9 L7 {2 T在Turbo C2.0启动过程中, 传递main()函数三个参数: argc, argv和env。 & T. Y+ `1 r4 U8 n6 c
* argc: 整数, 为传给main()的命令行参数个数。
# O! m/ M; I6 {4 H) s2 W$ L. h* argv: 字符串数组。
5 h* w+ J: p0 |* E) `# e1 [! e* e在DOS 3.X 版本中, argv[0] 为程序运行的全路径名; 对DOS 3.0
. d, I- s ^/ O! b C: q以下的版本, argv[0]为空串("") 。 ; v2 e, a1 d1 i% @" Z) ?. \/ b
argv[1] 为在DOS命令行中执行程序名后的第一个字符串;
3 z7 B( a0 J& H! p- o' i8 h2 g* d6 nargv[2] 为执行程序名后的第二个字符串;
1 j L9 Y {- _... 1 C! C) z* x# \) L* @/ M
argv[argc]为NULL。 , O+ f) f) S9 w, b+ i+ t( l, a4 C$ \
*env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符 s# [5 d7 C9 q* u8 c1 T3 C1 `
串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应值如C:\DOS, C: 5 R+ C# j5 d- b; \+ ]
\TURBOC(对于PATH) 或YES(对于87)。 # v+ c- P4 X: t! N5 H
Turbo C2.0启动时总是把这三个参数传递给main()函数, 可以在用户程序中 4 s1 Z" A6 l! w) a8 L
说明(或不说明)它们, 如果说明了部分(或全部)参数, 它们就成为main()子程序 O7 x. o3 `1 X$ _
的局部变量。
" a! c& D5 q* S* R请注意: 一旦想说明这些参数, 则必须按argc, argv, env 的顺序, 如以下 / Z; i& I' R9 o+ D3 N) N3 ]) r8 K8 ]
的例子: $ K. P4 _. l2 N! g, Q7 Z5 i
<FONT color=#0000ff>main() - O$ c) [% U% H4 w
main(int argc) + e4 k3 s& O0 k
main(int argc, char *argv[])
3 E$ J1 N& G! `3 q0 Xmain(int argc, char *argv[], char *env[]) </FONT>+ i/ A# |) ]7 y" x% B/ P, ?
其中第二种情况是合法的, 但不常见, 因为在程序中很少有只用argc, 而不 + P6 h- h/ ^5 H7 k
用argv[]的情况。
% w+ n* [+ a9 H5 b9 ~* x* |以下提供一样例程序EXAMPLE.EXE, 演示如何在main()函数中使用三个参数: 9 n6 S& [" E6 |) a7 k' ~
<FONT color=#0000ff>/*program name EXAMPLE.EXE*/ , n2 M3 [! c9 A: k
#include <STDIO.H>
8 S) i* Q4 H- H, U#include <STDLIB.H>: o) h1 P6 @) o( \
main(int argc, char *argv[], char *env[]) 0 r& ~# b7 u) B2 v. l" p% N
{
/ Q4 q: f# u; _: {# q! @8 yint i; 5 k& _+ d* ^+ E& }0 e
printf("These are the %d command- line arguments passed to 5 m9 B* g z8 \9 g# h
main:\n\n", argc);
0 E( L, D+ c5 ~. c7 C5 o$ Hfor(i=0; i<=argc; i++) ) x, i; f0 p% N. k
printf("argv[%d]:%s\n", i, argv);
, J% U o7 w( B. y9 _5 V- Nprintf("\nThe environment string(s)on this system are:\n\n");
, z# d- A, ^+ R9 i2 ?" Ifor(i=0; env!=NULL; i++) x u# b( f7 Q, n, l2 a8 |" Q
printf(" env[%d]:%s\n", i, env); ! l2 a2 d- [$ g. `3 I
} </FONT>
' z* E% ?1 x0 N4 ^% L% F如果在DOS 提示符下, 按以下方式运行EXAMPLE.EXE:
/ I& r! w0 O3 x+ H! |C:\example first_argument "argument with blanks" 3 4 "last but
9 e/ O D- F0 g4 k. c1 Uone" stop! 1 j% e. J. p, ]$ h/ |! a
注意: 可以用双引号括起内含空格的参数, 如本例中的: " argument ! S. c# _4 |4 M" \4 F
with blanks"和"Last but one")。 + `/ _$ ?- f* W4 t$ {+ x" _
结果是这样的: 3 i, @+ U6 K- S- c
<FONT color=#0000ff>The value of argc is 7
- u, j8 T w2 o; v6 G+ v8 _; J6 rThese are the 7 command-linearguments passed to main:
1 R/ V( g# Z: l s1 Vargv[0]:C:\TURBO\EXAMPLE.EXE
* U: ^* } d0 D+ yargv[1]:first_argument , c9 v* a6 j9 O' E
argv[2]:argument with blanks : D! n) Q/ B; w& y$ ]5 W2 K. ?# D
argv[3]:3
+ v/ y- g" @* f$ t) E, Cargv[4]:4
6 v f+ p! d, y, A2 R; g" {argv[5]:last but one j* E- {5 k/ G
argv[6]:stop! 9 z3 X; [) u [( Z
argv[7] NULL)
+ e/ O# Q& T$ \The environment string(s) on this system are: 1 {6 Y+ |* ?7 [2 c3 ~/ E. `( ?
env[0]: COMSPEC=C:\COMMAND.COM ; K3 D) o% m. \ L. b0 V5 d
env[1]: PROMPT=$P$G /*视具体设置而定*/ 5 ]/ s. J) ?% g) m- t
env[2]: PATH=C:\DOS;C:\TC /*视具体设置而定*/ ; [" x, J# I" a% q; O. w
</FONT>
: t; }0 Y' M, v3 w T- N! R应该提醒的是: 传送main() 函数的命令行参数的最大长度为128 个字符 (包
& @0 ?% X \; u2 [8 |+ ^0 n8 H# T+ M括参数间的空格), 这是由DOS 限制的。 5 l/ ]* d! e9 k$ Q! |
</P>
+ u/ [/ v' W+ X. {< ><FONT color=#ff0000>函数名: matherr </FONT>8 b1 S4 t: k( J# g5 W3 V) `
功 能: 用户可修改的数学错误处理程序
3 S% u* g. X1 k# c9 g% P用 法: int matherr(struct exception *e);
6 F" E9 N. _1 x7 j _0 y程序例: </P>( p9 ?; h4 Z% W' e5 t3 i' u7 `
< ><FONT color=#0000ff>/* This is a user-defined matherr function that prevents ) w* h/ }( K5 @3 Q8 i
any error messages from being printed. */ </FONT></P>
' x: Y9 w8 x# M( [3 E+ d< ><FONT color=#0000ff>#include<MATH.H> </FONT></P>1 P' m1 h& X0 ]; m5 Z" r; t8 w" W
< ><FONT color=#0000ff>int matherr(struct exception *a) - W5 P+ \1 t( A: Z% a- O
{ * C# ~8 d& h+ H
return 1;
/ b- P h5 }, `, g; h8 s+ _}
% v7 p a3 f6 m5 w/ k6 Q</FONT>
3 D/ v6 B: `% b& B5 P
& y1 a; f9 k; D1 [* a</P>9 s- A9 l+ C- Q3 E
< ><FONT color=#ff0000>函数名: memccpy </FONT>
/ L2 ^) K/ k: t. s4 m3 I0 @功 能: 从源source中拷贝n个字节到目标destin中
* ]0 [2 {# K) l K+ ~1 y用 法: void *memccpy(void *destin, void *source, unsigned char ch,
. n P; k P. _7 H3 x- q7 P" t, Kunsigned n);
! V6 {( B0 U$ @( R程序例: </P>/ z; _( f5 K, Y. U
< ><FONT color=#0000ff>#include <STRING.H>
6 }8 ^+ q( _) H: b#include <STDIO.H></FONT></P>
- T# V! G2 i/ ]& h6 l8 V+ j, q- _< ><FONT color=#0000ff>int main(void) , k) a3 a: c. }" Q- s! w
{
& e6 d! S0 y" v* ]: Bchar *src = "This is the source string";
2 e+ e1 M# N3 V ^, E7 m8 o; Kchar dest[50];
9 @) \# U2 e- S' Q1 jchar *ptr; </FONT></P>
1 b ?( L Q* @: r# v< ><FONT color=#0000ff>ptr = memccpy(dest, src, 'c', strlen(src)); </FONT></P>
3 `- b% G+ s" f3 i2 ^< ><FONT color=#0000ff>if (ptr) % |1 P2 [ v& g7 Y
{
1 ?! k* {2 ~6 e$ |+ d*ptr = '\0';
% L! v/ c4 N* U7 N0 }- f" S9 R% a) Bprintf("The character was found: %s\n", dest);
9 a2 }' e5 w. d. _! m}
, G$ k3 o: I1 n- I. P9 r- }else
, ?$ \8 d: e2 L- W" A5 B$ z. V6 Pprintf("The character wasn't found\n");
+ P/ F& ]! m3 \1 E# G6 s$ ?8 Preturn 0;
) G6 D. R. |+ f}
8 u! ]* G+ @5 |: P" i9 c5 ]</FONT>6 Z& C: y& T% {3 [$ @8 T: @
</P>0 T! V8 {( c2 S' a- v
< ><FONT color=#ff0000>函数名: malloc</FONT> 1 ?& [) `$ S5 k% i& i) S
功 能: 内存分配函数 % x: N* w- A0 D5 S+ q
用 法: void *malloc(unsigned size); / O5 L1 h" t& H
程序例: </P>
1 o5 E; O/ L0 }$ ^5 w< ><FONT color=#0000ff>#include <STDIO.H>
2 e0 _! o9 V9 X4 z#include <STRING.H>
# Z- N! T* ?- i; S#include <ALLOC.H>
0 \+ J% {+ k W T5 c' E* t% m#include < ROCESS.H></FONT></P>
5 T: c% u- g6 J2 A0 h< ><FONT color=#0000ff>int main(void) " v& B* N3 {- F8 R
{ / w, ?$ i7 s6 F7 Q' M1 ]3 A! t
char *str; </FONT></P>
# I1 k% A# V) c- ?0 \. O8 P< ><FONT color=#0000ff>/* allocate memory for string */ ) p, M% L2 |) m- A1 }4 _
/* This will generate an error when compiling */
$ J# d3 B3 b2 x: v/* with C++, use the new operator instead. */
( q# m, s% R xif ((str = malloc(10)) == NULL) " d: ]9 a0 p I& d
{ 9 n7 B, M% ~. L# m3 J9 o" P; N
printf("Not enough memory to allocate buffer\n");
+ _' r8 [! _9 J# \& z- `+ @exit(1); /* terminate program if out of memory */ 0 o$ o5 g+ n. T" M' f# I
} </FONT></P>
% q7 |4 k: i& D9 g< ><FONT color=#0000ff>/* copy "Hello" into string */
6 a$ {2 \% g" ` t# _8 H$ sstrcpy(str, "Hello"); </FONT></P>
% x" W8 y; c3 Y& ^< ><FONT color=#0000ff>/* display string */
, {. N e0 Q& [' {: v Iprintf("String is %s\n", str); </FONT></P>
5 y8 w, e7 j: v* A' U< ><FONT color=#0000ff>/* free memory */ ( b9 E' v. [: d8 W5 V2 r
free(str); </FONT></P>
1 c; X! S) p6 j0 q e< ><FONT color=#0000ff>return 0;
: `8 X1 K j. _0 x8 I}
! E u+ d2 |8 O) }0 y
6 I6 w" Z0 J4 r+ j; Y- g! p</FONT>
8 c; @# ^( |" L" D* J1 } M</P>
! D, m' U. {6 Z+ x8 x< ><FONT color=#ff0000>函数名: memchr</FONT>
1 L9 [1 f. ?$ w: z功 能: 在数组的前n个字节中搜索字符 + L4 i$ |) z# w) I$ C( m I
用 法: void *memchr(void *s, char ch, unsigned n); / {. l9 P2 T' I9 W8 ?- p" q
程序例: </P>/ F! U6 W9 P5 n' ~4 f2 K4 x$ ^- K
< ><FONT color=#0000ff>#include <STRING.H>- W' q6 m' `" y4 ]
#include <STDIO.H></FONT></P>, S0 | O8 U2 ~: t; I7 }) y
< ><FONT color=#0000ff>int main(void)
) R5 I+ k: B& V0 y6 c! u8 n{ 6 x1 y; ]( ^" Y w
char str[17];
0 f2 u, g" U }char *ptr; </FONT></P>7 S0 j( j# q8 ]+ j3 U
< ><FONT color=#0000ff>strcpy(str, "This is a string");
! w4 V( O+ t/ k% x& B# bptr = memchr(str, 'r', strlen(str)); : [+ S; Q9 ?! f1 t% j3 H
if (ptr)
3 u3 [1 M& [' I! b8 ~printf("The character 'r' is at position: %d\n", ptr - str);
- u1 H! Z/ h) F: f! E6 }1 aelse ' p6 H: q( {9 b2 w: w1 |
printf("The character was not found\n"); + \! s. N( i' j& g8 W( a6 Q
return 0; 2 h5 A5 g; P& t$ `2 _6 z
}
! S o" {! P: N) y9 j* s</FONT></P>, W3 E/ T( G$ g; c, W( q* D. o! f
< ><FONT color=#ff0000>函数名: memcpy </FONT>
- e0 B' j9 Z: I5 S功 能: 从源source中拷贝n个字节到目标destin中
" ]8 U: S: w0 a1 |* K用 法: void *memcpy(void *destin, void *source, unsigned n); + a" w$ E9 A( m% T: L ~
程序例: </P>, y* P5 {; o) [, h- C4 C8 i, ^
< ><FONT color=#0000ff>#include <STDIO.H>
R( R/ u$ z9 R& t. v' q#include <STRING.H>
! V/ w" y) a9 g* M( m4 D) K6 Zint main(void)
0 I6 X- \ y* \* G{ ' O+ F9 D' L0 q( H
char src[] = "******************************";
: K, X. _3 V h$ o9 gchar dest[] = "abcdefghijlkmnopqrstuvwxyz0123456709";
? F. g8 j+ k2 H- ?$ @: Hchar *ptr; 6 I5 I' N7 |9 w1 K
printf("destination before memcpy: %s\n", dest);
( Q. w+ T- m4 dptr = memcpy(dest, src, strlen(src));
- U4 _+ Q) H/ u, g6 mif (ptr)
: |- t5 q: _6 j: Y! ^5 |printf("destination after memcpy: %s\n", dest); 8 _( Y2 n% T, ~$ G4 k4 h2 N
else 4 u& A0 |( [5 A. G6 v
printf("memcpy failed\n");
* P4 B4 D; B% X/ W3 o+ Xreturn 0;
5 A8 R% D; ^: U} ; U% W" I% K7 I* g s- j
</FONT>7 n2 r- V! B4 i6 S; F+ `
</P>" u G4 o: t" o Y( a6 i
< ><FONT color=#ff0000>函数名: memicmp </FONT>* X, F& L' o( K" \ q
功 能: 比较两个串s1和s2的前n个字节, 忽略大小写
+ A. J3 W1 k. @% _3 n" `用 法: int memicmp(void *s1, void *s2, unsigned n);
6 `, O2 c& n Y/ c6 X8 x4 u程序例: </P>2 C1 l* d5 b% N; B; l! K
< ><FONT color=#0000ff>#include <STDIO.H>
& @/ B. J) V* w( H9 M#include <STRING.H></FONT></P>
; y1 z1 @3 y$ h7 g7 |< ><FONT color=#0000ff>int main(void) ' F6 o b' N3 R) n1 v' g! m
{ % i4 B% I9 y1 g3 C1 T9 |7 j i
char *buf1 = "ABCDE123";
, u4 L' b# X5 y: r3 echar *buf2 = "abcde456";
9 w" E4 e4 Z% J3 a( w; s2 O" xint stat; 0 E- j' {. a% A% r
stat = memicmp(buf1, buf2, 5);
: V, U3 E, E: h% Yprintf("The strings to position 5 are "); 9 l; V5 f0 p6 ^3 J4 o9 ~4 h
if (stat) 7 g& Q2 F) T8 F/ w3 W! b
printf("not "); % i+ V l2 x/ z2 t& X
printf("the same\n");
0 S0 ^4 y* v8 z* Dreturn 0;
. \- p7 w( |, }* t' Z2 P2 |7 u* [}
$ w1 z% m- T$ d2 k* A</FONT>( o3 Z7 L; s* j, k$ m6 c
</P>
9 Y& z# C: L% c6 n, r/ `3 Q4 ^0 _< ><FONT color=#ff0000>函数名: memmove </FONT>
6 E2 q" f6 j {% ^' q. e$ V! K功 能: 移动一块字节
4 \/ ^- T+ M* u6 W- a* e用 法: void *memmove(void *destin, void *source, unsigned n); $ f/ u' B* H3 b4 l$ S, h
程序例: </P>, ~2 C2 M6 T4 L* \. N# h
<P><FONT color=#0000ff>#include <STRING.H>
: j1 Q* q# {$ F% F+ E- T6 W0 w) Y#include <STDIO.H></FONT></P>
$ T5 ?1 O+ I3 f/ @* _. k. Z<P><FONT color=#0000ff>int main(void)
1 t( M1 n ~( W6 v4 N/ A7 e# {{
9 k3 C2 {3 K- A3 s+ x! Hchar *dest = "abcdefghijklmnopqrstuvwxyz0123456789"; % |( p6 F X* ^. [
char *src = "******************************"; 2 H6 i, ~# y: ^) t
printf("destination prior to memmove: %s\n", dest); & \: T/ \1 p) e
memmove(dest, src, 26); ) v6 E+ U% D, Q3 N: x+ a8 p
printf("destination after memmove: %s\n", dest); ! B o' ~7 _& d: q1 x
return 0; . I9 D, q9 m- \0 b& H$ K/ f
}
- w9 b8 e c0 c6 N8 G; L; q" k$ _, ]% u" w3 H6 q
</FONT>8 z5 d2 j3 D! s& V/ m& ~6 G; @
</P>) r7 o. c( q( @
<P><FONT color=#ff0000>函数名: memset </FONT>
' N9 V1 i! t' B, [; e ^; G功 能: 设置s中的所有字节为ch, s数组的大小由n给定
+ H _( U( M2 k( {用 法: void *memset(void *s, char ch, unsigned n); ! i8 {( V+ B! j
程序例: </P>
* @+ R8 A( T9 w. Y<P><FONT color=#0000ff>#include <STRING.H>3 A% ?# b% q7 x ?
#include <STDIO.H>
5 L; O5 J5 X% ]# @8 Z$ z#include <MEM.H></FONT></P>
( @' p! C; E5 C! u2 |" G3 u: K1 G<P><FONT color=#0000ff>int main(void)
$ F+ G. d& E, F/ g% ^{
5 l. g9 r: A. Q. m3 ]0 gchar buffer[] = "Hello world\n"; </FONT></P>2 Q+ p" a' j$ F! ?
<P><FONT color=#0000ff>printf("Buffer before memset: %s\n", buffer);
% h% l! E! [4 ?! a3 fmemset(buffer, '*', strlen(buffer) - 1);
, W* {! E6 ] f+ }* g# [printf("Buffer after memset: %s\n", buffer);
# l3 q' k( f9 E" ?! mreturn 0; 8 o7 e$ X( m6 ]9 O, p# ?) i
} </FONT>
- b' l; h. D+ H. ?$ @0 \3 j4 o* z8 O1 ?% k0 H* b$ D+ T
</P>! N$ P9 G4 d# K9 |
<P><FONT color=#ff0000>函数名: mkdir </FONT>* N' m) k8 [' f8 l( k
功 能: 建立一个目录 : ^( i; w& j( K3 _4 _/ ?: r) `
用 法: int mkdir(char *pathname);
9 x4 i6 b" t# u. |$ u6 ?: c6 N程序例: </P>
, o8 _: |$ q& P<P><FONT color=#0000ff>#include <STDIO.H>" X& l, @+ l/ K- I% X3 E/ }, f
#include <CONIO.H>$ C8 u* k% n/ ?" k
#include <PROCESS.H>
: e6 P, u8 \5 \9 W1 V7 y% v#include <DIR.H></FONT></P>4 i# @, f! H( A7 o& R
<P><FONT color=#0000ff>int main(void)
- l9 o9 A, x# Z4 P, F{ 3 o; K& k2 e: a; E$ a
int status; </FONT></P>+ `" N7 Z& _: s6 X, l# N. m/ a
<P><FONT color=#0000ff>clrscr(); " I& U( n; J+ J2 B
status = mkdir("asdfjklm");
8 {0 c. o/ ]9 \8 J* d' W(!status) ? (printf("Directory created\n")) : * O+ }0 E j. A6 h3 W% v
(printf("Unable to create directory\n")); </FONT></P>
& P N0 w0 s$ U<P><FONT color=#0000ff>getch(); 1 t+ u1 {- D/ k$ u% F/ _3 h
system("dir"); 2 |5 @8 @0 Q& j `6 R2 r
getch(); </FONT></P>! M6 N! c5 A+ B/ e4 O3 W0 T
<P><FONT color=#0000ff>status = rmdir("asdfjklm");
+ E( d" Y" o. X. T1 r" Y# k8 u(!status) ? (printf("Directory deleted\n")) :
9 n0 S8 E0 b5 k/ R) @8 p6 ^: E2 N(perror("Unable to delete directory")); </FONT></P>
& m" L j2 O+ Z: R( x0 j<P><FONT color=#0000ff>return 0; 4 c! x" O# O0 @& {3 w% N0 T" M
} 8 P1 [# Y# e+ }9 g z' R
" x( S# f% I4 q& b" W0 d) j; s+ r' i+ ~</FONT>
3 U/ J4 ^- S- m0 N6 K/ A6 O# ]</P>- a- Q& F& c+ b: d# C. f: }8 U
<P><FONT color=#ff0000>函数名: mktemp </FONT>
, V; ?; d6 y9 O5 Y: C! q功 能: 建立唯一的文件名
: M' {1 g \8 j8 l0 s/ \' I7 z用 法: char *mktemp(char *template); O( l* c2 `' d
程序例: </P>3 q. W+ N# g/ j- K" d1 }/ F
<P><FONT color=#0000ff>#include <DIR.H>9 S; m7 A' i, d
#include <STDIO.H></FONT></P>
4 M+ S9 ?5 I' W; y/ P* W9 S<P><FONT color=#0000ff>int main(void) ) N3 R9 s! [) `. A, m, I
{
8 k/ I2 {8 d6 a# \& ~/* fname defines the template for the
8 G1 t4 G) J$ G6 f& D4 F0 r6 atemporary file. */ </FONT></P>. W3 G2 h" l5 m
<P><FONT color=#0000ff>char *fname = "TXXXXXX", *ptr; </FONT></P>: a2 |- o6 r! n p
<P><FONT color=#0000ff>ptr = mktemp(fname); P% n/ q! j7 [# C
printf("%s\n",ptr); 3 j2 ]" x V6 ~
return 0;
( {# u+ d/ z6 f" Q' u3 i8 t} 3 P K) x5 {! C* W' G E
</FONT>
# B! V/ G9 d; Y, ~0 b+ z3 E* C</P>
/ D1 w% \: q+ x1 ^$ p& g<P><FONT color=#ff0000>函数名: MK_FP </FONT>
, [5 d$ u5 _: i功 能: 设置一个远指针
1 k7 J( u( x( h8 ]( F用 法: void far *MK_FP(unsigned seg, unsigned off); 5 g8 P' x5 g. p' ^9 g+ s
程序例: </P>- K- x. `9 B+ ^- Q5 o. e
<P><FONT color=#0000ff>#include <DOS.H>( N# E3 [5 p x
#include <GRAPHICS.H></FONT></P>
$ P/ L K: D7 o: O& ^5 v* j$ X9 t, R9 ?<P><FONT color=#0000ff>int main(void) $ i; F/ m9 P, E; b6 M% ]
{
0 X: w# c0 j1 s, Y0 P) Hint gd, gm, i;
) S- l6 L7 |% d7 l4 b Munsigned int far *screen; </FONT></P>% o& ?, }7 u2 Y1 k N. A+ v
<P><FONT color=#0000ff>detectgraph(&gd, &gm); % [! h& p4 F8 Y8 j0 F" ?
if (gd == HERCMONO) 0 u5 i6 r: u& l2 r% U) Z, z8 A
screen = MK_FP(0xB000, 0); 0 E" H1 u0 X% ~% K0 E% P# n
else 9 @: p; |' E* s) L) c* P2 n! n9 W
screen = MK_FP(0xB800, 0); 3 r$ M2 L: l3 o6 w
for (i=0; i<26; i++)
% y$ g; A7 v, ^9 Zscreen = 0x0700 + ('a' + i); + Q6 [9 q& D- i. n& l, u; ^$ r
return 0; 5 e- v3 D' N: _- n( s. i
} 0 R: h" D( R; h1 R' A+ c# t. c
</FONT>! ~/ Q& T4 A! v6 C
</P>) {6 r$ ~+ X6 _# `, H7 X" ]
<P><FONT color=#ff0000>函数名: modf </FONT>8 P- J/ a6 ]/ @
功 能: 把数分为指数和尾数 7 J0 ]# G( l6 Q; B6 `8 y& l
用 法: double modf(double value, double *iptr); 5 i! u7 i0 {" O7 g
程序例: </P>0 k5 \& ~+ @, L# t7 [$ g: B! M
<P><FONT color=#0000ff>#include <MATH.H>" k, A* e F8 ~6 j, h. r# A$ s2 d
#include <STDIO.H></FONT></P>
* P1 `0 I0 C; I& p/ G# D+ o& ^4 {: U<P><FONT color=#0000ff>int main(void) ' `2 p. A: w9 c, \
{
+ O& u- G) _) k1 ]8 z8 H5 Q7 Ydouble fraction, integer; / p6 s# ^( d& [
double number = 100000.567; </FONT></P>" ] X3 x5 Z- e
<P><FONT color=#0000ff>fraction = modf(number, &integer);
! n+ b4 q( D4 S' c3 Fprintf("The whole and fractional parts of %lf are %lf and %lf\n", 8 u+ I5 R( y$ T/ n" H6 D
number, integer, fraction); + s/ m8 e g1 s" j3 Z& b( z& I% _3 ^5 T
return 0;
: ^3 k M* R) A$ R} </FONT>
; X K2 o/ @! k# k0 S/ Z) o
P" L, F7 s+ U% O% N9 c</P>
; ~8 s$ G! n( M<P><FONT color=#ff0000>函数名: movedata </FONT>- V- U6 j8 v* p
功 能: 拷贝字节 1 _# K$ B, ~ Z
用 法: void movedata(int segsrc, int offsrc, int segdest, 5 L: T1 H0 k# G [: Q7 e' l5 ]
int offdest, unsigned numbytes);
/ P0 }. e, F' P3 O4 R( |! N程序例: </P>/ l+ i8 K3 x2 ?( u
<P><FONT color=#0000ff>#include <MEM.H></FONT></P>9 w6 ~' `. t6 s& t
<P><FONT color=#0000ff>#define MONO_BASE 0xB000 </FONT></P>
n0 U8 f P! f<P><FONT color=#0000ff>/* saves the contents of the monochrome screen in buffer */ ; O& X& O& T( k" ?: X
void save_mono_screen(char near *buffer)
/ K8 Y# k) H( i$ B# s2 R- t3 v{ j& h# h2 M$ D7 ?% w0 l) Y
movedata(MONO_BASE, 0, _DS, (unsigned)buffer, 80*25*2);
9 e% B/ P# |8 S/ K) ~! K8 F T! @} </FONT></P> U: k% q1 w% ]& y, g9 w
<P><FONT color=#0000ff>int main(void)
* C% N. K9 {5 D0 k{ : W) @# y, C5 D, b! w3 W
char buf[80*25*2]; ; Y2 s% g, C7 p2 ?$ ]
save_mono_screen(buf); ; {+ p, s9 U, V$ n# S9 {
} 1 @% j i v2 I+ U! P0 f4 ^
</FONT>
) W! F3 x- c% F- F d1 B</P>
T& ^! s6 O& X+ {& E<P><FONT color=#ff0000>函数名: moverel </FONT> u9 M3 f y4 `2 N! H$ g2 j& M8 V3 P
功 能: 将当前位置(CP)移动一相对距离
5 E- D* Y' D( @, u用 法: void far moverel(int dx, int dy); 0 L, [& W4 A8 O, |) g2 J d$ W
程序例: </P>
# H" W V$ n* _6 M) K# z5 `<P><FONT color=#0000ff>#include <GRAPHICS.H>7 j& A) g9 G' b6 D9 i! w* V& e# l
#include <STDLIB.H>
$ o) Q7 p0 i' l: k#include <STDIO.H>
n. y0 w+ x9 s8 W; O#include <CONIO.H></FONT></P>
6 w5 z% l2 h7 x/ c4 \! _<P><FONT color=#0000ff>int main(void)
' H( J* E# x% ~1 D+ U- L{
5 q# D1 o3 M G% d, @ t/* request auto detection */
5 X4 j2 Y4 l2 Z3 @) dint gdriver = DETECT, gmode, errorcode;
( _3 I7 v; c' A2 |2 o* nchar msg[80]; </FONT></P>% ?- O) y; g$ X. t) }/ ^" Q; {
<P><FONT color=#0000ff>/* initialize graphics and local variables */
8 g- o. m& W/ t; N. dinitgraph(&gdriver, &gmode, ""); </FONT></P>. ~3 Q0 t8 f- i2 f
<P><FONT color=#0000ff>/* read result of initialization */
) u/ p. R# E$ |% I2 W- t6 S0 k( z" jerrorcode = graphresult(); : @- ]8 S7 f7 V# ^6 p! W
if (errorcode != grOk) /* an error occurred */ ( x) {8 D6 c" M/ F
{ , V2 ~- m }* \6 u8 }' [& Q" @
printf("Graphics error: %s\n", grapherrormsg(errorcode));
. ^# U! R# X7 i9 t/ dprintf("Press any key to halt:");
4 `, M1 N p0 ?8 ~getch();
! k3 K# x4 K& o. L3 n: Oexit(1); /* terminate with an error code */
. i2 k' c- x3 n8 e) I+ L+ F5 E} </FONT></P>( w2 j2 J$ i4 T9 {
<P><FONT color=#0000ff>/* move the C.P. to location (20, 30) */ 9 e! @2 ^, C, _# ]# p
moveto(20, 30); </FONT></P>% C/ |0 u8 Q. [! T
<P><FONT color=#0000ff>/* plot a pixel at the C.P. */
, f1 v$ E; f1 Mputpixel(getx(), gety(), getmaxcolor()); </FONT></P>
8 c( \) ^; } `0 u+ x2 i<P><FONT color=#0000ff>/* create and output a message at (20, 30) */ $ J* m; T8 B3 u! g6 E! J
sprintf(msg, " (%d, %d)", getx(), gety()); 8 t3 [2 h+ E% e8 D( z7 x* @7 I
outtextxy(20, 30, msg); </FONT></P>
& l8 b/ w- j& l+ N; U/ g<P><FONT color=#0000ff>/* move to a point a relative distance */
D9 x0 v( Z; m9 o' i/* away from the current value of C.P. */ , V5 E9 d$ c( A4 @
moverel(100, 100); </FONT></P>/ J- E4 {/ s7 v5 {9 U* d
<P><FONT color=#0000ff>/* plot a pixel at the C.P. */ / n- U4 Y C1 B9 t5 V) K& U+ q. q
putpixel(getx(), gety(), getmaxcolor()); </FONT></P>, N/ v% u% N2 K" A
<P><FONT color=#0000ff>/* create and output a message at C.P. */ ! X: i2 \- t5 n0 e" i
sprintf(msg, " (%d, %d)", getx(), gety());
" m) f v+ t1 Y A$ \8 H$ uouttext(msg); </FONT></P>
. I* |; X7 i( y i! L2 c<P><FONT color=#0000ff>/* clean up */
# Q1 v1 q. N3 }5 o7 N( _getch();
: t) L# U8 ?5 o* l, ~" a' Eclosegraph(); ; F# |6 }8 @% b0 u
return 0; 7 \" j: W8 N. y5 s; U; h
} ! P% \5 |4 b ?1 F; c
</FONT>
, q% C& i' m {; i+ n</P>9 Z+ \/ b/ ]' \: P
<P><FONT color=#ff0000>函数名: movetext</FONT>
+ M d$ I* n" E功 能: 将屏幕文本从一个矩形区域拷贝到另一个矩形区域 ) t, f5 L" v. ]% G0 j
用 法: int movetext(int left, int top, int right, int bottom,
9 D" ?% b4 K: Z3 c( p, }2 b4 uint newleft, int newtop); & o" K/ {+ p* R7 W0 r
程序例: 0 }* n {! @, z4 E8 u/ C
<FONT color=#0000ff>#include <CONIO.H>
, h4 Q* x7 w) E9 g# C/ J1 c#include <STRING.H></FONT></P>& ^% }, e* C1 ~
<P><FONT color=#0000ff>int main(void) ; y3 ^' G# n) @- [; @. q# ]
{
- T4 i$ `; J# cchar *str = "This is a test string"; </FONT></P>! j4 R. }* _) o: w
<P><FONT color=#0000ff>clrscr();
5 ~- V3 }' p1 B( H5 ycputs(str); & T$ {% l' B0 t3 Y: ~! o9 s
getch(); </FONT></P>* b) g. w n" x, r- C3 i p
<P><FONT color=#0000ff>movetext(1, 1, strlen(str), 2, 10, 10);
4 f: a( i( b- f& t$ {8 pgetch(); </FONT></P>
, q }- A' ]+ ]+ g<P><FONT color=#0000ff>return 0; . k; c* \" s8 w! X3 n
}
7 F9 o2 ~4 a+ x( ]& _0 |
) X" Z8 E) O0 `4 V K6 X</FONT></P>7 G' o7 x8 P( [" ?$ n. y1 y" v& u
<P><FONT color=#ff0000>函数名: moveto</FONT> $ r: r' L& L% C9 T% z1 E7 s. P' t
功 能: 将CP移到(x, y)
% [% O, W5 D7 e用 法: void far moveto(int x, int y); 0 Y. G/ C# ]. `
程序例: </P># b7 Q2 b( u/ k) Z
<P><FONT color=#0000ff>#include <GRAPHICS.H>: N. }& z v/ a: T
#include <STDLIB.H>* V6 t" f) J1 [, Q$ j+ A
#include <STDIO.H>
" E7 t {) D3 W: J, W! P#include <CONIO.H></FONT></P>& q2 m0 ?& X! Q ?2 H: C
<P><FONT color=#0000ff>int main(void)
1 J: N. }& ^* S- e" h{ 5 S% Y; O. G, L# u
/* request auto detection */ + q7 p2 U! h9 e# z2 J
int gdriver = DETECT, gmode, errorcode;
" z7 O+ p a& f8 f% }* p, C% N, vchar msg[80]; </FONT></P>( E* \+ j/ J% |+ O8 `
<P><FONT color=#0000ff>/* initialize graphics and local variables */ # v( \% s2 a" e M% ^! Z& X# X: F# E
initgraph(&gdriver, &gmode, ""); </FONT></P>
0 y5 w5 L) W F/ M5 E6 i* k<P><FONT color=#0000ff>/* read result of initialization */
9 @4 q( \- Z) Z& x2 ferrorcode = graphresult(); 0 d* m& g3 P( _# e
if (errorcode != grOk) /* an error occurred */
0 }, s( o% ], y P* g{
- A2 [) q3 ?7 z& e! j% p& E, Z4 f4 i) Rprintf("Graphics error: %s\n", grapherrormsg(errorcode));
& U$ I( y( P0 }: j# a4 dprintf("Press any key to halt:");
7 I! f! A7 w" s0 k3 w! a" I. q! Ugetch();
0 V# h, L# j6 q9 d! K, z1 Vexit(1); /* terminate with an error code */ : w: x; v, Q; ?5 R
} </FONT></P>- M% Q% h# Q: ~& D j" b8 P& A$ {
<P><FONT color=#0000ff>/* move the C.P. to location (20, 30) */
+ F- l! H$ s4 y( Zmoveto(20, 30); </FONT></P>
5 _' w- N+ [' w3 e; Y<P><FONT color=#0000ff>/* plot a pixel at the C.P. */ 1 i. o! c; `* ?7 V
putpixel(getx(), gety(), getmaxcolor()); </FONT></P>
3 S9 h! b/ a( ]<P><FONT color=#0000ff>/* create and output a message at (20, 30) */
$ K9 W5 a7 s, E' N/ |: c. Hsprintf(msg, " (%d, %d)", getx(), gety());
* J: @- U" n' j) d/ I. douttextxy(20, 30, msg); </FONT></P>* r2 O! `" G4 E# K1 m( ]( S
<P><FONT color=#0000ff>/* move to (100, 100) */ # J4 H# Q' K- |/ S
moveto(100, 100); </FONT></P>) f& |+ f# E) V7 I* ?. k
<P><FONT color=#0000ff>/* plot a pixel at the C.P. */
4 H l3 _: [6 q6 U2 r7 Rputpixel(getx(), gety(), getmaxcolor()); </FONT></P>/ s; `' f3 [$ R$ I+ F
<P><FONT color=#0000ff>/* create and output a message at C.P. */ ' X3 E" h0 p: f
sprintf(msg, " (%d, %d)", getx(), gety()); * p, ^, F. b+ L/ D" G: c0 N: Z5 L
outtext(msg); </FONT></P>* d( @5 Y. Z( h0 W; B) i
<P><FONT color=#0000ff>/* clean up */
6 Z! r( I! }9 H& x% I) M$ f- Tgetch(); * _7 _. Y9 X7 v. ^% ~0 g
closegraph(); 5 S* n: `# e: Y, u% x* o8 }' e
return 0;
; v5 b3 p: W @}
6 q5 k: b/ g' K. V7 H W: f+ C' s</FONT>
: `' ?; w8 }6 }& j$ T</P>/ i! d# n. E0 n* f+ p& V
<P><FONT color=#ff0000>函数名: movemem </FONT>
2 y9 m! |- a% L6 a功 能: 移动一块字节 4 G4 e6 x* N% Q" f5 H( W
用 法: void movemem(void *source, void *destin, unsigned len);
7 u" J: `' u+ T* C9 a% g1 ?' ^程序例: </P>% C- i: ^$ M7 b6 B2 i9 F
<P><FONT color=#0000ff>#include <MEM.H>
9 R3 s4 `, q( ?+ F, h( E6 K+ P#include <ALLOC.H>
% Q' h- R! A h! _: S#include <STDIO.H>
; o3 h" r2 @, [8 W z: S5 ]1 W#include <STRING.H></FONT></P>2 O' J4 M. g, `3 Q
<P><FONT color=#0000ff>int main(void)
$ ?2 w" C U; a) {- A{ $ _, K6 A2 B! S' W) S) y
char *source = "Borland International"; ) V6 t8 Y! X8 Z% R6 b
char *destination; 8 d4 z% v. t8 Y% z5 j4 P* ~, w
int length; </FONT></P>
9 O) D0 k2 {- H<P><FONT color=#0000ff>length = strlen(source); 3 n6 H- Q% S! e: m/ f' b
destination = malloc(length + 1); 3 i1 n4 H* g1 |( `2 Z; Y
movmem(source,destination,length); 7 V( k9 U/ G; W% t" ]+ D: J; }& U. U
printf("%s\n",destination); </FONT></P>! n6 W9 |2 q0 E2 v( m
<P><FONT color=#0000ff>return 0; . r" q9 K1 c5 _! ?
}
9 ^% H1 O5 z7 R0 n+ r8 J+ W' {
# N! d1 ~9 i/ W6 F2 F! J7 Z' w5 \</FONT></P>3 x, m2 q- \: [
<P><FONT color=#ff0000>函数名: normvideo </FONT>7 |2 d+ I* d1 c( e
功 能: 选择正常亮度字符
+ N. \& ~5 r/ S& V) `* b! S用 法: void normvideo(void);
! V, m" t( K7 J+ f程序例: </P>: `4 l! |0 U$ e
<P><FONT color=#0000ff>#include <CONIO.H></FONT></P>
6 u9 ?) T- W% b$ S3 N& b<P><FONT color=#0000ff>int main(void)
4 t2 _, s5 `) S# M0 O1 ^1 x{
6 X! g4 {5 |8 Tnormvideo(); . N. f8 n. r8 @; s9 ]0 E
cprintf("NORMAL Intensity Text\r\n");
% @& ^) ^$ @1 p9 I: |( @& jreturn 0; - F, T% H- E5 v- ]4 {0 \0 y
}
) C' t H- V9 v- Y6 y5 ^" H1 V; W! D' c+ n# ^, X; {: k
</FONT></P>2 \" ~. f/ j. x
<P><FONT color=#ff0000>函数名: nosound</FONT>
! Q3 R" S' F% s功 能: 关闭PC扬声器 9 Y9 S* b. k) C3 P5 @
用 法: void nosound(void);
4 b$ {7 U: Y, _; q; v' O3 ?程序例: </P>) y' g1 B) d; q5 x
<P><FONT color=#0000ff>/* Emits a 7-Hz tone for 10 seconds. </FONT></P>: f) ?: B+ ~# }8 n9 W$ S
<P><FONT color=#0000ff>True story: 7 Hz is the resonant frequency of a chicken's skull cavity. # }0 ]* T( s( O7 M
This was determined empirically in Australia, where a new factory 3 f) x, j9 | R5 E5 \* Y+ i/ Q; k
generating 7-Hz tones was located too close to a chicken ranch: . o F# K2 M7 J! l% r1 m# {3 i) t
When the factory started up, all the chickens died. </FONT></P>
; s+ I! n* S* I% z' d: k0 j<P><FONT color=#0000ff>Your PC may not be able to emit a 7-Hz tone. / w1 ]$ Q$ X. i" T
*/ </FONT></P>
/ L ?# q7 D! z) _2 p5 q<P><FONT color=#0000ff>int main(void)
% J$ r' B% T4 @% `" u! m9 v{
% Q* g# L) z/ E; _- Qsound(7); 8 I- b" R% F, K% Q( ~2 H
delay(10000); ; Y* T/ K6 Z5 g9 R& q, V
nosound();
2 z) _9 P/ b2 ?' U! ~4 u; w}
& G4 Y4 l- }$ `; i P1 g7 A7 V</FONT></P> |
zan
|