📄 fm.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=gb_2312-80">
<meta name="Author" content="wdg">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>网上学堂 --> C语言编程宝典之一 -->main()主函数 </title>
</head>
<body>
<div align="center"><center>
<table border="1" cellpadding="4" width="640"
bordercolordark="#FFFFFF" bordercolorlight="#FFFFFF">
<tr>
<td bgcolor="#FFE6B0" bordercolor="#8080FF" class="p9"><font
color="#BB0000">导航条:--></font> <a
href="../../index.html">网上学堂</a> --> <a
href="../tcindex.htm"><font face="宋体">C</font>语言编程宝典之一</a>
-->main()主函数 </td>
</tr>
<tr>
<td bordercolor="#8080FF" class="p9">
main()主函数 <p> 每一C
程序都必须有一main()函数,
可以根据自己的爱好把它放在程序的某 <br>
个地方。有些程序员把它放在最前面,
而另一些程序员把它放在最后面, 无论放 <br>
在哪个地方, 以下几点说明都是适合的。 <br>
1. main() 参数 <br>
在Turbo C2.0启动过程中, 传递main()函数三个参数:
argc, argv和env。 <br>
* argc: 整数, 为传给main()的命令行参数个数。
<br>
* argv: 字符串数组。
<br>
在DOS 3.X 版本中, argv[0]
为程序运行的全路径名; 对DOS 3.0 <br>
以下的版本, argv[0]为空串("") 。 <br>
argv[1] 为在DOS命令行中执行程序名后的第一个字符串;
<br>
argv[2] 为执行程序名后的第二个字符串; <br>
... <br>
argv[argc]为NULL。 <br>
*env: 安符串数组。env[]
的每一个元素都包含ENVVAR=value形式的字符 <br>
串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应值如C:\DOS,
C: <br>
\TURBOC(对于PATH) 或YES(对于87)。 <br>
Turbo C2.0启动时总是把这三个参数传递给main()函数,
可以在用户程序中 <br>
说明(或不说明)它们, 如果说明了部分(或全部)参数,
它们就成为main()子程序 <br>
的局部变量。 <br>
请注意: 一旦想说明这些参数,
则必须按argc, argv, env 的顺序, 如以下 <br>
的例子: <br>
main() <br>
main(int argc) <br>
main(int argc, char *argv[]) <br>
main(int argc, char *argv[],
char *env[]) <br>
其中第二种情况是合法的,
但不常见, 因为在程序中很少有只用argc,
而不 <br>
用argv[]的情况。 <br>
以下提供一样例程序EXAMPLE.EXE,
演示如何在main()函数中使用三个参数: <br>
/*program name EXAMPLE.EXE*/ <br>
#include <stdio.h> <br>
#include <stdlib.h> <br>
main(int argc, char *argv[],
char *env[]) <br>
{ <br>
int i; <br>
printf("These are the %d command- line
arguments passed to <br>
main:\n\n", argc); <br>
for(i=0; i<=argc; i++) <br>
printf("argv[%d]:%s\n", i, argv[i]); <br>
printf("\nThe environment string(s)on this system
are:\n\n"); <br>
for(i=0; env[i]!=NULL; i++) <br>
printf(" env[%d]:%s\n", i, env[i]); <br>
} <br>
如果在DOS 提示符下,
按以下方式运行EXAMPLE.EXE: <br>
C:\example first_argument
"argument with blanks" 3 4
"last but <br>
one" stop! <br>
注意:
可以用双引号括起内含空格的参数,
如本例中的: " argument <br>
with blanks"和"Last but one")。 <br>
结果是这样的: <br>
The value of argc is 7 <br>
These are the 7
command-linearguments passed to main: <br>
argv[0]:C:\TURBO\EXAMPLE.EXE <br>
argv[1]:first_argument <br>
argv[2]:argument with blanks <br>
argv[3]:3 <br>
argv[4]:4 <br>
argv[5]:last but one <br>
argv[6]:stop! <br>
argv[7]:(NULL) <br>
The environment string(s) on
this system are: <br>
env[0]: COMSPEC=C:\COMMAND.COM <br>
env[1]: PROMPT=$P$G
/*视具体设置而定*/ <br>
env[2]: PATH=C:\DOS;C:\TC
/*视具体设置而定*/ <br>
<br>
应该提醒的是: 传送main()
函数的命令行参数的最大长度为128 个字符 (包
<br>
括参数间的空格), 这是由DOS 限制的。 <br>
</p>
<p>函数名: matherr <br>
功 能: 用户可修改的数学错误处理程序
<br>
用 法: int matherr(struct exception *e); <br>
程序例: </p>
<p>/* This is a user-defined matherr function that
prevents <br>
any error messages from being printed. */ </p>
<p>#include<math.h> </p>
<p>int matherr(struct exception *a) <br>
{ <br>
return 1; <br>
} <br>
<br>
<br>
</p>
<p>函数名: memccpy <br>
功 能: 从源source中拷贝n个字节到目标destin中
<br>
用 法: void *memccpy(void *destin, void *source,
unsigned char ch, <br>
unsigned n); <br>
程序例: </p>
<p>#include <string.h> <br>
#include <stdio.h> </p>
<p>int main(void) <br>
{ <br>
char *src = "This is the source
string"; <br>
char dest[50]; <br>
char *ptr; </p>
<p> ptr = memccpy(dest, src, 'c',
strlen(src)); </p>
<p> if (ptr) <br>
{ <br>
*ptr = '\0'; <br>
printf("The character
was found: %s\n", dest); <br>
} <br>
else <br>
printf("The character
wasn't found\n"); <br>
return 0; <br>
} <br>
<br>
</p>
<p>函数名: malloc <br>
功 能: 内存分配函数 <br>
用 法: void *malloc(unsigned size); <br>
程序例: </p>
<p>#include <stdio.h> <br>
#include <string.h> <br>
#include <alloc.h> <br>
#include <process.h> </p>
<p>int main(void) <br>
{ <br>
char *str; </p>
<p> /* allocate memory for string */ <br>
/* This will generate an error when
compiling */ <br>
/* with C++, use the new operator instead.
*/ <br>
if ((str = malloc(10)) == NULL) <br>
{ <br>
printf("Not enough
memory to allocate buffer\n"); <br>
exit(1); /*
terminate program if out of memory */ <br>
} </p>
<p> /* copy "Hello" into string */ <br>
strcpy(str, "Hello"); </p>
<p> /* display string */ <br>
printf("String is %s\n", str); </p>
<p> /* free memory */ <br>
free(str); </p>
<p> return 0; <br>
} <br>
<br>
<br>
</p>
<p>函数名: memchr <br>
功 能: 在数组的前n个字节中搜索字符 <br>
用 法: void *memchr(void *s, char ch, unsigned
n); <br>
程序例: </p>
<p>#include <string.h> <br>
#include <stdio.h> </p>
<p>int main(void) <br>
{ <br>
char str[17]; <br>
char *ptr; </p>
<p> strcpy(str, "This is a
string"); <br>
ptr = memchr(str, 'r', strlen(str)); <br>
if (ptr) <br>
printf("The character
'r' is at position: %d\n", ptr - str); <br>
else <br>
printf("The character
was not found\n"); <br>
return 0; <br>
} <br>
</p>
<p>函数名: memcpy <br>
功 能: 从源source中拷贝n个字节到目标destin中
<br>
用 法: void *memcpy(void *destin, void *source,
unsigned n); <br>
程序例: </p>
<p>#include <stdio.h> <br>
#include <string.h> <br>
int main(void) <br>
{ <br>
char src[] =
"******************************"; <br>
char dest[] =
"abcdefghijlkmnopqrstuvwxyz0123456709"; <br>
char *ptr; <br>
printf("destination before memcpy:
%s\n", dest); <br>
ptr = memcpy(dest, src, strlen(src)); <br>
if (ptr) <br>
printf("destination
after memcpy: %s\n", dest); <br>
else <br>
printf("memcpy
failed\n"); <br>
return 0; <br>
} <br>
<br>
</p>
<p>函数名: memicmp <br>
功 能: 比较两个串s1和s2的前n个字节,
忽略大小写 <br>
用 法: int memicmp(void *s1, void *s2, unsigned
n); <br>
程序例: </p>
<p>#include <stdio.h> <br>
#include <string.h> </p>
<p>int main(void) <br>
{ <br>
char *buf1 = "ABCDE123"; <br>
char *buf2 = "abcde456"; <br>
int stat; <br>
stat = memicmp(buf1, buf2, 5); <br>
printf("The strings to position 5 are
"); <br>
if (stat) <br>
printf("not "); <br>
printf("the same\n"); <br>
return 0; <br>
} <br>
<br>
</p>
<p>函数名: memmove <br>
功 能: 移动一块字节 <br>
用 法: void *memmove(void *destin, void *source,
unsigned n); <br>
程序例: </p>
<p>#include <string.h> <br>
#include <stdio.h> </p>
<p>int main(void) <br>
{ <br>
char *dest =
"abcdefghijklmnopqrstuvwxyz0123456789"; <br>
char *src =
"******************************"; <br>
printf("destination prior to memmove:
%s\n", dest); <br>
memmove(dest, src, 26); <br>
printf("destination after memmove:
%s\n", dest); <br>
return 0; <br>
} <br>
<br>
<br>
</p>
<p>函数名: memset <br>
功 能: 设置s中的所有字节为ch, s数组的大小由n给定
<br>
用 法: void *memset(void *s, char ch, unsigned
n); <br>
程序例: </p>
<p>#include <string.h> <br>
#include <stdio.h> <br>
#include <mem.h> </p>
<p>int main(void) <br>
{ <br>
char buffer[] = "Hello world\n"; </p>
<p> printf("Buffer before memset:
%s\n", buffer); <br>
memset(buffer, '*', strlen(buffer) - 1); <br>
printf("Buffer after memset:
%s\n", buffer); <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -