c语言函数---M

书画小说软件 制作更惬意的读、更舒心的写、更轻松的发布

最全古典小说网 由本软件发布所得

                      main()主函数
    每一C 程序都必须有一main()函数, 可以根据自己的爱好把它放在程序的某

个地方。有些程序员把它放在最前面, 而另一些程序员把它放在最后面, 无论放

在哪个地方, 以下几点说明都是适合的。

    1. main() 参数
    在Turbo C2.0启动过程中, 传递main()函数三个参数: argc, argv和env。
     * argc:  整数, 为传给main()的命令行参数个数。
     * argv:  字符串数组。
              在DOS 3.X 版本中, argv[0] 为程序运行的全路径名; 对DOS 3.0
              以下的版本, argv[0]为空串("") 。
              argv[1] 为在DOS命令行中执行程序名后的第一个字符串;
              argv[2] 为执行程序名后的第二个字符串;
              ...
              argv[argc]为NULL。
     *env:  安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符

串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应值如C:\DOS, C:

\TURBOC(对于PATH) 或YES(对于87)。
    Turbo C2.0启动时总是把这三个参数传递给main()函数, 可以在用户程序中

说明(或不说明)它们, 如果说明了部分(或全部)参数, 它们就成为main()子程序

的局部变量。

    请注意: 一旦想说明这些参数, 则必须按argc, argv, env 的顺序, 如以下

的例子:

     main()
     main(int argc)
     main(int argc, char *argv[])
     main(int argc, char *argv[], char *env[])

其中第二种情况是合法的, 但不常见, 因为在程序中很少有只用argc, 而不

用argv[]的情况。

    以下提供一样例程序EXAMPLE.EXE,  演示如何在main()函数中使用三个参数:
     /*program name EXAMPLE.EXE*/
     #include <stdio.h>
     #include <stdlib.h>
     main(int argc, char *argv[], char *env[])
     {
          int i;
          printf("These are the %d  command- line  arguments passed  to
                  main:\n\n", argc);
          for(i=0; i<=argc; i++)
            printf("argv[%d]:%s\n", i, argv[i]);
          printf("\nThe environment string(s)on this system are:\n\n");
          for(i=0; env[i]!=NULL; i++)
               printf(" env[%d]:%s\n", i, env[i]);
     }
    如果在DOS 提示符下, 按以下方式运行EXAMPLE.EXE:
    C:\example first_argument "argument with blanks"  3  4  "last  but
one" stop!
    注意: 可以用双引号括起内含空格的参数, 如本例中的:   "  argument
with blanks"和"Last but one")。
    结果是这样的:
     The value of argc is 7
     These are the 7 command-linearguments passed to main:
     argv[0]:C:\TURBO\EXAMPLE.EXE
     argv[1]:first_argument
     argv[2]:argument with blanks
     argv[3]:3
     argv[4]:4
     argv[5]:last but one
     argv[6]:stop!
     argv[7]:(NULL)
     The environment string(s) on this system are:
     env[0]: COMSPEC=C:\COMMAND.COM
     env[1]: PROMPT=$P$G            /*视具体设置而定*/
     env[2]: PATH=C:\DOS;C:\TC      /*视具体设置而定*/

应该提醒的是: 传送main() 函数的命令行参数的最大长度为128 个字符 (包

括参数间的空格), 这是由DOS 限制的。

函数名: matherr

功 能: 用户可修改的数学错误处理程序

用 法: int matherr(struct exception *e);

程序例:

/* This is a user-defined matherr function that prevents
   any error messages from being printed. */
#include<math.h>
int matherr(struct exception *a)
{
   return 1;
}

函数名: memccpy

功 能: 从源source中拷贝n个字节到目标destin中

用 法: void *memccpy(void *destin, void *source, unsigned char ch,

       unsigned n);

程序例:

#include <string.h>
#include <stdio.h>
int main(void)
{
   char *src = "This is the source string";
   char dest[50];
   char *ptr;
   ptr = memccpy(dest, src, ‘c‘, strlen(src));
   if (ptr)
   {
      *ptr = ‘\0‘;
      printf("The character was found:  %s\n", dest);
   }
   else
      printf("The character wasn‘t found\n");
   return 0;
}

函数名: malloc

功 能: 内存分配函数

用 法: void *malloc(unsigned size);

程序例:

#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <process.h>
int main(void)
{
   char *str;
   /* allocate memory for string */
   /* This will generate an error when compiling */
   /* with C++, use the new operator instead. */
   if ((str = malloc(10)) == NULL)
   {
      printf("Not enough memory to allocate buffer\n");
      exit(1);  /* terminate program if out of memory */
   }
   /* copy "Hello" into string */
   strcpy(str, "Hello");
   /* display string */
   printf("String is %s\n", str);
   /* free memory */
   free(str);
   return 0;
}

函数名: memchr

功 能: 在数组的前n个字节中搜索字符

用 法: void *memchr(void *s, char ch, unsigned n);

程序例:

#include <string.h>
#include <stdio.h>
int main(void)
{
   char str[17];
   char *ptr;
   strcpy(str, "This is a string");
   ptr = memchr(str, ‘r‘, strlen(str));
   if (ptr)
      printf("The character ‘r‘ is at position: %d\n", ptr - str);
   else
      printf("The character was not found\n");
   return 0;
}

函数名: memcpy

功 能: 从源source中拷贝n个字节到目标destin中

用 法: void *memcpy(void *destin, void *source, unsigned n);

程序例:

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

函数名: memicmp

功 能: 比较两个串s1和s2的前n个字节, 忽略大小写

用 法: int memicmp(void *s1, void *s2, unsigned n);

程序例:

#include <stdio.h>
#include <string.h>
int main(void)
{
   char *buf1 = "ABCDE123";
   char *buf2 = "abcde456";
   int stat;
   stat = memicmp(buf1, buf2, 5);
   printf("The strings to position 5 are ");
   if (stat)
      printf("not ");
   printf("the same\n");
   return 0;
}

函数名: memmove

功 能: 移动一块字节

用 法: void *memmove(void *destin, void *source, unsigned n);

程序例:

#include <string.h>
#include <stdio.h>
int main(void)
{
  char *dest = "abcdefghijklmnopqrstuvwxyz0123456789";
  char *src = "******************************";
  printf("destination prior to memmove: %s\n", dest);
  memmove(dest, src, 26);
  printf("destination after memmove:    %s\n", dest);
  return 0;
}

函数名: memset

功 能: 设置s中的所有字节为ch, s数组的大小由n给定

用 法: void *memset(void *s, char ch, unsigned n);

程序例:

#include <string.h>
#include <stdio.h>
#include <mem.h>
int main(void)
{
   char buffer[] = "Hello world\n";
   printf("Buffer before memset: %s\n", buffer);
   memset(buffer, ‘*‘, strlen(buffer) - 1);
   printf("Buffer after memset:  %s\n", buffer);
   return 0;
}

函数名: mkdir

功 能: 建立一个目录

用 法: int mkdir(char *pathname);

程序例:

#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <dir.h>
int main(void)
{
  int status;
   clrscr();
   status = mkdir("asdfjklm");
   (!status) ? (printf("Directory created\n")) :
               (printf("Unable to create directory\n"));
   getch();
   system("dir");
   getch();
   status = rmdir("asdfjklm");
   (!status) ? (printf("Directory deleted\n")) :
  (perror("Unable to delete directory"));
   return 0;
}

函数名: mktemp

功 能: 建立唯一的文件名

用 法: char *mktemp(char *template);

程序例:

#include <dir.h>
#include <stdio.h>
int main(void)
{
   /* fname defines the template for the
     temporary file.  */
   char *fname = "TXXXXXX", *ptr;
   ptr = mktemp(fname);
   printf("%s\n",ptr);
   return 0;
}

函数名: MK_FP

功 能: 设置一个远指针

用 法: void far *MK_FP(unsigned seg, unsigned off);

程序例:

#include <dos.h>
#include <graphics.h>
int main(void)
{
   int gd, gm, i;
   unsigned int far *screen;
   detectgraph(&gd, &gm);
   if (gd == HERCMONO)
       screen = MK_FP(0xB000, 0);
   else
       screen = MK_FP(0xB800, 0);
   for (i=0; i<26; i++)
      screen[i] = 0x0700 + (‘a‘ + i);
   return 0;
}

函数名: modf

功 能: 把数分为指数和尾数

用 法: double modf(double value, double *iptr);

程序例:

#include <math.h>
#include <stdio.h>
int main(void)
{
   double fraction, integer;
   double number = 100000.567;
   fraction = modf(number, &integer);
   printf("The whole and fractional parts of %lf are %lf and %lf\n",
          number, integer, fraction);
   return 0;
}

函数名: movedata

功 能: 拷贝字节

用 法: void movedata(int segsrc, int offsrc, int segdest,

  int offdest, unsigned numbytes);

程序例:

#include <mem.h>
#define MONO_BASE 0xB000
/* saves the contents of the monochrome screen in buffer */
void save_mono_screen(char near *buffer)
{
   movedata(MONO_BASE, 0, _DS, (unsigned)buffer, 80*25*2);
}
int main(void)
{
   char buf[80*25*2];
   save_mono_screen(buf);
}

函数名: moverel

功 能: 将当前位置(CP)移动一相对距离

用 法: void far moverel(int dx, int dy);

程序例:

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
   /* request auto detection */
   int gdriver = DETECT, gmode, errorcode;
   char msg[80];
   /* initialize graphics and local variables */
   initgraph(&gdriver, &gmode, "");
   /* read result of initialization */
   errorcode = graphresult();
   if (errorcode != grOk)  /* an error occurred */
   {
      printf("Graphics error: %s\n", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1); /* terminate with an error code */
   }
   /* move the C.P. to location (20, 30) */
   moveto(20, 30);
   /* plot a pixel at the C.P. */
   putpixel(getx(), gety(), getmaxcolor());
   /* create and output a message at (20, 30) */
   sprintf(msg, " (%d, %d)", getx(), gety());
   outtextxy(20, 30, msg);
   /* move to a point a relative distance */
   /* away from the current value of C.P. */
   moverel(100, 100);
   /* plot a pixel at the C.P. */
   putpixel(getx(), gety(), getmaxcolor());
   /* create and output a message at C.P. */
   sprintf(msg, " (%d, %d)", getx(), gety());
   outtext(msg);
   /* clean up */
   getch();
   closegraph();
   return 0;
}

函数名: movetext

功 能: 将屏幕文本从一个矩形区域拷贝到另一个矩形区域

用 法: int movetext(int left, int top, int right, int bottom,

  int newleft, int newtop);

程序例:

#include <conio.h>
#include <string.h>
int main(void)
{
   char *str = "This is a test string";
   clrscr();
   cputs(str);
   getch();
   movetext(1, 1, strlen(str), 2, 10, 10);
   getch();
   return 0;
}

函数名: moveto

功 能: 将CP移到(x, y)

用 法: void far moveto(int x, int y);

程序例:

#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{
   /* request auto detection */
   int gdriver = DETECT, gmode, errorcode;
   char msg[80];
   /* initialize graphics and local variables */
   initgraph(&gdriver, &gmode, "");
   /* read result of initialization */
   errorcode = graphresult();
   if (errorcode != grOk)  /* an error occurred */
   {
      printf("Graphics error: %s\n", grapherrormsg(errorcode));
      printf("Press any key to halt:");
      getch();
      exit(1); /* terminate with an error code */
   }
   /* move the C.P. to location (20, 30) */
   moveto(20, 30);
   /* plot a pixel at the C.P. */
   putpixel(getx(), gety(), getmaxcolor());
   /* create and output a message at (20, 30) */
   sprintf(msg, " (%d, %d)", getx(), gety());
   outtextxy(20, 30, msg);
   /* move to (100, 100) */
   moveto(100, 100);
   /* plot a pixel at the C.P. */
   putpixel(getx(), gety(), getmaxcolor());
   /* create and output a message at C.P. */
   sprintf(msg, " (%d, %d)", getx(), gety());
   outtext(msg);
   /* clean up */
   getch();
   closegraph();
   return 0;
}

函数名: movemem

功 能: 移动一块字节

用 法: void movemem(void *source, void *destin, unsigned len);

程序例:

#include <mem.h>
#include <alloc.h>
#include <stdio.h>
#include <string.h>
int main(void)
{
   char *source = "Borland International";
   char *destination;
   int length;
   length = strlen(source);
   destination = malloc(length + 1);
   movmem(source,destination,length);
   printf("%s\n",destination);
   return 0;
}

函数名: normvideo

功 能: 选择正常亮度字符

用 法: void normvideo(void);

程序例:

#include <conio.h>
int main(void)
{
   normvideo();
   cprintf("NORMAL Intensity Text\r\n");
   return 0;
}

函数名: nosound

功 能: 关闭PC扬声器

用 法: void nosound(void);

程序例:

/* Emits a 7-Hz tone for 10 seconds.
     True story: 7 Hz is the resonant frequency of a chicken‘s skull cavity.
     This was determined empirically in Australia, where a new factory
     generating 7-Hz tones was located too close to a chicken ranch:
     When the factory started up, all the chickens died.
     Your PC may not be able to emit a 7-Hz tone.
*/
int main(void)
{
   sound(7);
   delay(10000);
   nosound();
}

书画小说软件 制作更惬意的读、更舒心的写、更轻松的发布

最全古典小说网 由本软件发布所得

时间: 2024-08-08 05:39:03

c语言函数---M的相关文章

C#委托与C语言函数指针及函数指针数组

C#委托与C语言函数指针及函数指针数组 在使用C#时总会为委托而感到疑惑,但现在总新温习了一遍C语言后,才真正理解的委托. 其实委托就类似于C/C++里的函数指针,在函数传参时传递的是函数指针,在调用的时候通过指针访问这个函数. 在C语言中函数指针的申明如下: //可以理解为申明一个指着变量 Func ,它的类型是 返回Type(可以为 void )类型的参数,接收 (Type one,Type two,...)类型的//参数(可以不接受参数). Type *Func(Type one,Type

c 语言 函数的整理 百度脑图版本

下面整理一下C语言函数的知识点 :使用百度脑图进行整理,详情请看上传的图片: 版权声明:本文为博主原创文章,未经博主允许不得转载.

汇编1 ----C语言函数1

构造以下C程序并在合适位置插入breakpoints 在Visual Studio 2015 CTP6对其反汇编. 下面来分析 z = add(1, 2); 009C170E 6A 02 push 2 ????int z; ????z = add(1, 2); 009C1710 6A 01 push 1 009C1712 E8 8D FA FF FF call 009C11A4 009C1717 83 C4 08 add esp,8 009C171A 89 45 F8 mov dword ptr

(转)如何编写有多个返回值的C语言函数

1引言    笔者从事C语言教学多年,在教学中学生们常常会问到如何编写具有多个返回值的C语言函数.编写有多个返回值的函数是所有C语言教材里均没有提到的知识点,但在实际教学与应用的过程中我们都有可能会遇到这样的问题.有学生也尝试了不少方法:如把多个需要返回的值作相应的处理后变成一个可以用return语句返回的数据,再在主调函数中拆开返回的数据使之变成几个值:或者把需要返回多个值的一个函数分开几个函数去实现多个值的返回.这些方法虽然最终都能实现返回要求的多个值,但从程序算法的合理性与最优化方面去考虑

Linux汇编GAS调用C语言函数实例

Blum的书上只讲了C语言调用汇编,没讲汇编调用C语言.我自己尝试了下. 最终试验成功了,在此写出与大家分享.期间历经无数错误,无数异常,我不是醉了,而是跪了...好在最后好了. 程序实现一个换值功能,在main.s里定义a=10,b=20,然后调用C语言函数把a,b换值. 新建两个文件分别为main.s的汇编文件,还有pro.c的C语言函数文件. main.s的代码如下: .section .data a: .int 10 b: .int 20 .section .text .globl ma

C语言函数sscanf()的用法 (转载

在我的学习过程中,从文件读取数据是一件很麻烦的事,所幸有sscanf()函数. C语言函数sscanf()的用法 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明: sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)

C语言函数sscanf()的用法(转)

转自:http://www.cnblogs.com/lyq105/archive/2009/11/28/1612677.html C语言函数sscanf()的用法 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明: sscanf与scanf

[整理]C语言函数说明和定义

函数的一般形式是:type-specifier function_name(parameter list) parameter declarations{   body of the function} 1.类型说明符定义了函数中return语句返回值的类型,该返回值可以是任何有效类型.假如没有类型说明符出现,函数返回一个整型值. 当一个函数没有明确说明类型时, C语言的编译程序自动将整型( i n t)作为这个函数的缺省类型,缺省类型适用于很大一部分函数. 当有必要返回其它类型数据时,需要分两

从linux0.11中起动部分代码看汇编调用c语言函数

上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一段代码(linux0.11的启动分析部分会在另一部分中再分析,由于此文仅涉及c与汇编代码的问题,). after_page_tables: pushl $0 # These are the parameters to main :-) pushl $0 pushl $0 pushl $L6 # re

借助动态代码生成技术在基于Webkit引擎的HTML5网页JS内调用易语言函数

作者:庄晓立(Liigo) 日期:2015年3月3日夜 原创链接:http://blog.csdn.net/liigo/article/details/44045177 版权所有,转载请注明出处:http://blog.csdn.net/liigo 前两天我协助解决了一个技术问题,在此稍作记录和总结. 具体来说,就是在使用基于Webkit引擎的封装组件wke的过程中,需要把一个易语言函数注册给JavaScript引擎,让它可以在网页里被调用(就像在网页里调用普通JavaScript函数一样).如