⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fm.htm

📁 有关C语言基础知识的讲解
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML>
<HEAD>
   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
   <META NAME="Author" CONTENT="wdg">
   <META NAME="GENERATOR" CONTENT="Mozilla/4.03 [en] (Win95; I) [Netscape]">
   <TITLE>fm</TITLE>
</HEAD>
<BODY>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
main()主函数

<P>&nbsp;&nbsp;&nbsp; 每一C 程序都必须有一main()函数, 可以根据自己的爱好把它放在程序的某
<BR>个地方。有些程序员把它放在最前面, 而另一些程序员把它放在最后面, 无论放
<BR>在哪个地方, 以下几点说明都是适合的。
<BR>&nbsp;&nbsp;&nbsp; 1. main() 参数
<BR>&nbsp;&nbsp;&nbsp; 在Turbo C2.0启动过程中, 传递main()函数三个参数:
argc, argv和env。
<BR>&nbsp;&nbsp;&nbsp;&nbsp; * argc:&nbsp; 整数, 为传给main()的命令行参数个数。
<BR>&nbsp;&nbsp;&nbsp;&nbsp; * argv:&nbsp; 字符串数组。
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
在DOS 3.X 版本中, argv[0] 为程序运行的全路径名; 对DOS 3.0
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
以下的版本, argv[0]为空串("") 。
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
argv[1] 为在DOS命令行中执行程序名后的第一个字符串;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
argv[2] 为执行程序名后的第二个字符串;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
...
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
argv[argc]为NULL。
<BR>&nbsp;&nbsp;&nbsp;&nbsp; *env:&nbsp; 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符
<BR>串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应值如C:\DOS,
C:
<BR>\TURBOC(对于PATH) 或YES(对于87)。
<BR>&nbsp;&nbsp;&nbsp; Turbo C2.0启动时总是把这三个参数传递给main()函数,
可以在用户程序中
<BR>说明(或不说明)它们, 如果说明了部分(或全部)参数, 它们就成为main()子程序
<BR>的局部变量。
<BR>&nbsp;&nbsp;&nbsp; 请注意: 一旦想说明这些参数, 则必须按argc, argv,
env 的顺序, 如以下
<BR>的例子:
<BR>&nbsp;&nbsp;&nbsp;&nbsp; main()
<BR>&nbsp;&nbsp;&nbsp;&nbsp; main(int argc)
<BR>&nbsp;&nbsp;&nbsp;&nbsp; main(int argc, char *argv[])
<BR>&nbsp;&nbsp;&nbsp;&nbsp; main(int argc, char *argv[], char *env[])
<BR>&nbsp;&nbsp;&nbsp; 其中第二种情况是合法的, 但不常见, 因为在程序中很少有只用argc,
而不
<BR>用argv[]的情况。
<BR>&nbsp;&nbsp;&nbsp; 以下提供一样例程序EXAMPLE.EXE,&nbsp; 演示如何在main()函数中使用三个参数:
<BR>&nbsp;&nbsp;&nbsp;&nbsp; /*program name EXAMPLE.EXE*/
<BR>&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;stdio.h>
<BR>&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;stdlib.h>
<BR>&nbsp;&nbsp;&nbsp;&nbsp; main(int argc, char *argv[], char *env[])
<BR>&nbsp;&nbsp;&nbsp;&nbsp; {
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i;
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("These
are the %d&nbsp; command- line&nbsp; arguments passed&nbsp; to
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
main:\n\n", argc);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0; i&lt;=argc;
i++)
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
printf("argv[%d]:%s\n", i, argv[i]);
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\nThe
environment string(s)on this system are:\n\n");
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0; env[i]!=NULL;
i++)
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
printf(" env[%d]:%s\n", i, env[i]);
<BR>&nbsp;&nbsp;&nbsp;&nbsp; }
<BR>&nbsp;&nbsp;&nbsp; 如果在DOS 提示符下, 按以下方式运行EXAMPLE.EXE:
<BR>&nbsp;&nbsp;&nbsp; C:\example first_argument "argument with blanks"&nbsp;
3&nbsp; 4&nbsp; "last&nbsp; but
<BR>one" stop!
<BR>&nbsp;&nbsp;&nbsp; 注意: 可以用双引号括起内含空格的参数, 如本例中的:&nbsp;&nbsp;
"&nbsp; argument
<BR>with blanks"和"Last but one")。
<BR>&nbsp;&nbsp;&nbsp; 结果是这样的:
<BR>&nbsp;&nbsp;&nbsp;&nbsp; The value of argc is 7
<BR>&nbsp;&nbsp;&nbsp;&nbsp; These are the 7 command-linearguments passed
to main:
<BR>&nbsp;&nbsp;&nbsp;&nbsp; argv[0]:C:\TURBO\EXAMPLE.EXE
<BR>&nbsp;&nbsp;&nbsp;&nbsp; argv[1]:first_argument
<BR>&nbsp;&nbsp;&nbsp;&nbsp; argv[2]:argument with blanks
<BR>&nbsp;&nbsp;&nbsp;&nbsp; argv[3]:3
<BR>&nbsp;&nbsp;&nbsp;&nbsp; argv[4]:4
<BR>&nbsp;&nbsp;&nbsp;&nbsp; argv[5]:last but one
<BR>&nbsp;&nbsp;&nbsp;&nbsp; argv[6]:stop!
<BR>&nbsp;&nbsp;&nbsp;&nbsp; argv[7]:(NULL)
<BR>&nbsp;&nbsp;&nbsp;&nbsp; The environment string(s) on this system are:
<BR>&nbsp;&nbsp;&nbsp;&nbsp; env[0]: COMSPEC=C:\COMMAND.COM
<BR>&nbsp;&nbsp;&nbsp;&nbsp; env[1]: PROMPT=$P$G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/*视具体设置而定*/
<BR>&nbsp;&nbsp;&nbsp;&nbsp; env[2]: PATH=C:\DOS;C:\TC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
/*视具体设置而定*/
<BR>&nbsp;
<BR>&nbsp;&nbsp;&nbsp;&nbsp; 应该提醒的是: 传送main() 函数的命令行参数的最大长度为128
个字符 (包
<BR>括参数间的空格),&nbsp; 这是由DOS 限制的。
<BR>&nbsp;

<P>函数名: matherr
<BR>功&nbsp; 能: 用户可修改的数学错误处理程序
<BR>用&nbsp; 法: int matherr(struct exception *e);
<BR>程序例:

<P>/* This is a user-defined matherr function that prevents
<BR>&nbsp;&nbsp; any error messages from being printed. */

<P>#include&lt;math.h>

<P>int matherr(struct exception *a)
<BR>{
<BR>&nbsp;&nbsp; return 1;
<BR>}
<BR>&nbsp;
<BR>&nbsp;
<BR>&nbsp;

<P>函数名: memccpy
<BR>功&nbsp; 能: 从源source中拷贝n个字节到目标destin中
<BR>用&nbsp; 法: void *memccpy(void *destin, void *source, unsigned char
ch,
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned n);
<BR>程序例:

<P>#include &lt;string.h>
<BR>#include &lt;stdio.h>

<P>int main(void)
<BR>{
<BR>&nbsp;&nbsp; char *src = "This is the source string";
<BR>&nbsp;&nbsp; char dest[50];
<BR>&nbsp;&nbsp; char *ptr;

<P>&nbsp;&nbsp; ptr = memccpy(dest, src, 'c', strlen(src));

<P>&nbsp;&nbsp; if (ptr)
<BR>&nbsp;&nbsp; {
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *ptr = '\0';
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("The character was found:&nbsp;
%s\n", dest);
<BR>&nbsp;&nbsp; }
<BR>&nbsp;&nbsp; else
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("The character wasn't found\n");
<BR>&nbsp;&nbsp; return 0;
<BR>}
<BR>&nbsp;
<BR>&nbsp;

<P>函数名: malloc
<BR>功&nbsp; 能: 内存分配函数
<BR>用&nbsp; 法: void *malloc(unsigned size);
<BR>程序例:

<P>#include &lt;stdio.h>
<BR>#include &lt;string.h>
<BR>#include &lt;alloc.h>
<BR>#include &lt;process.h>

<P>int main(void)
<BR>{
<BR>&nbsp;&nbsp; char *str;

<P>&nbsp;&nbsp; /* allocate memory for string */
<BR>&nbsp;&nbsp; /* This will generate an error when compiling */
<BR>&nbsp;&nbsp; /* with C++, use the new operator instead. */
<BR>&nbsp;&nbsp; if ((str = malloc(10)) == NULL)
<BR>&nbsp;&nbsp; {
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Not enough memory to allocate
buffer\n");
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit(1);&nbsp; /* terminate program
if out of memory */
<BR>&nbsp;&nbsp; }

<P>&nbsp;&nbsp; /* copy "Hello" into string */
<BR>&nbsp;&nbsp; strcpy(str, "Hello");

<P>&nbsp;&nbsp; /* display string */
<BR>&nbsp;&nbsp; printf("String is %s\n", str);

<P>&nbsp;&nbsp; /* free memory */
<BR>&nbsp;&nbsp; free(str);

<P>&nbsp;&nbsp; return 0;
<BR>}
<BR>&nbsp;
<BR>&nbsp;
<BR>&nbsp;

<P>函数名: memchr
<BR>功&nbsp; 能: 在数组的前n个字节中搜索字符
<BR>用&nbsp; 法: void *memchr(void *s, char ch, unsigned n);
<BR>程序例:

<P>#include &lt;string.h>
<BR>#include &lt;stdio.h>

<P>int main(void)
<BR>{
<BR>&nbsp;&nbsp; char str[17];
<BR>&nbsp;&nbsp; char *ptr;

<P>&nbsp;&nbsp; strcpy(str, "This is a string");
<BR>&nbsp;&nbsp; ptr = memchr(str, 'r', strlen(str));
<BR>&nbsp;&nbsp; if (ptr)
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("The character 'r' is at position:
%d\n", ptr - str);
<BR>&nbsp;&nbsp; else
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("The character was not found\n");
<BR>&nbsp;&nbsp; return 0;
<BR>}
<BR>&nbsp;

<P>函数名: memcpy
<BR>功&nbsp; 能: 从源source中拷贝n个字节到目标destin中
<BR>用&nbsp; 法: void *memcpy(void *destin, void *source, unsigned n);
<BR>程序例:

<P>#include &lt;stdio.h>
<BR>#include &lt;string.h>
<BR>int main(void)
<BR>{
<BR>&nbsp;&nbsp; char src[] = "******************************";
<BR>&nbsp;&nbsp; char dest[] = "abcdefghijlkmnopqrstuvwxyz0123456709";
<BR>&nbsp;&nbsp; char *ptr;
<BR>&nbsp;&nbsp; printf("destination before memcpy: %s\n", dest);
<BR>&nbsp;&nbsp; ptr = memcpy(dest, src, strlen(src));
<BR>&nbsp;&nbsp; if (ptr)
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("destination after memcpy:&nbsp;
%s\n", dest);
<BR>&nbsp;&nbsp; else
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("memcpy failed\n");
<BR>&nbsp;&nbsp; return 0;
<BR>}
<BR>&nbsp;
<BR>&nbsp;

<P>函数名: memicmp
<BR>功&nbsp; 能: 比较两个串s1和s2的前n个字节, 忽略大小写
<BR>用&nbsp; 法: int memicmp(void *s1, void *s2, unsigned n);
<BR>程序例:

<P>#include &lt;stdio.h>
<BR>#include &lt;string.h>

<P>int main(void)
<BR>{
<BR>&nbsp;&nbsp; char *buf1 = "ABCDE123";
<BR>&nbsp;&nbsp; char *buf2 = "abcde456";
<BR>&nbsp;&nbsp; int stat;
<BR>&nbsp;&nbsp; stat = memicmp(buf1, buf2, 5);
<BR>&nbsp;&nbsp; printf("The strings to position 5 are ");
<BR>&nbsp;&nbsp; if (stat)
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("not ");
<BR>&nbsp;&nbsp; printf("the same\n");
<BR>&nbsp;&nbsp; return 0;
<BR>}
<BR>&nbsp;
<BR>&nbsp;

<P>函数名: memmove
<BR>功&nbsp; 能: 移动一块字节
<BR>用&nbsp; 法: void *memmove(void *destin, void *source, unsigned n);
<BR>程序例:

<P>#include &lt;string.h>
<BR>#include &lt;stdio.h>

<P>int main(void)
<BR>{
<BR>&nbsp; char *dest = "abcdefghijklmnopqrstuvwxyz0123456789";
<BR>&nbsp; char *src = "******************************";
<BR>&nbsp; printf("destination prior to memmove: %s\n", dest);
<BR>&nbsp; memmove(dest, src, 26);
<BR>&nbsp; printf("destination after memmove:&nbsp;&nbsp;&nbsp; %s\n",
dest);
<BR>&nbsp; return 0;
<BR>}
<BR>&nbsp;
<BR>&nbsp;
<BR>&nbsp;

<P>函数名: memset
<BR>功&nbsp; 能: 设置s中的所有字节为ch, s数组的大小由n给定
<BR>用&nbsp; 法: void *memset(void *s, char ch, unsigned n);
<BR>程序例:

<P>#include &lt;string.h>
<BR>#include &lt;stdio.h>
<BR>#include &lt;mem.h>

<P>int main(void)
<BR>{
<BR>&nbsp;&nbsp; char buffer[] = "Hello world\n";

<P>&nbsp;&nbsp; printf("Buffer before memset: %s\n", buffer);
<BR>&nbsp;&nbsp; memset(buffer, '*', strlen(buffer) - 1);
<BR>&nbsp;&nbsp; printf("Buffer after memset:&nbsp; %s\n", buffer);
<BR>&nbsp;&nbsp; return 0;
<BR>}
<BR>&nbsp;
<BR>&nbsp;

<P>函数名: mkdir
<BR>功&nbsp; 能: 建立一个目录
<BR>用&nbsp; 法: int mkdir(char *pathname);
<BR>程序例:

<P>#include &lt;stdio.h>
<BR>#include &lt;conio.h>
<BR>#include &lt;process.h>
<BR>#include &lt;dir.h>

<P>int main(void)
<BR>{
<BR>&nbsp; int status;

<P>&nbsp;&nbsp; clrscr();
<BR>&nbsp;&nbsp; status = mkdir("asdfjklm");
<BR>&nbsp;&nbsp; (!status) ? (printf("Directory created\n")) :
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(printf("Unable to create directory\n"));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -