C语言 *函数

这一篇博客跟大家来谈一谈初识c语言的几个函数。

main函数

所有的C程序必须定义一个称之为main的外部函数,main函数是程序的入口,也就是当程序启动时所执行的第一个函数,当这个函数返回时,程序也将终止,并且这个函数的返回值被看成是程序成功或失败的标志,如果在到达main函数体的末尾时没有遇到返回语句 ,那就是遇到右括号就返回。
C的设计原则是把函数作为程序的构成模块。main()函数称之为主函数,一个C程序总是从main()函数开始执行的
main函数只有两种标准形式:
int main(void ) { }
int main(int argc ,char *argv[ ]) { }

char*argv[ ]是指针数组,[]的优先级很高,argv[]是数组,里面存放的类型是char*,每个main函数的参数都是字符串 char * argc 是main函数参数(外部命令参数)的个数,argv[] 存放各参数的内容。

如何理解:

在linux下编写一个hello.c文件如下:
这里写图片描述
此时的main函数是当前shell的一个子进程,而shell则是main函数的一个父进程。
gcc hello.c 编译好hello.c
在shell命令行输入.a/.out 执行该c程序
这里写图片描述
就可以看到main函数的参数是1 参数的内容是.a/.out
Linux下shell脚本给Main函数传递参数时候,一个空格代表一个参数的结束。
这里写图片描述

main函数返回类型默认是int,其实,如果没有返回值, 编译器会给你加上。
坚持使用标准的意义在于:当你把程序从一个编译器移到另一个编译器时,照样能正常运行。
返回值:
由于是 int main( ..) 那么当时 应当返回 int 但是  return 2.3 ;也能运行正确,这是因为编译器自动转换2.3为int,截断后为return 2;
如果写为 return “abc”;那么会报错, error C2440: “return”: 无法从“const char [4]”转换为“int”

返回值的意义:

return返回的数值由程序的作者自定。返回不同的值可以代表不同的含义,一般是代表出错的原因。传统上返回0代表程序正常结束(其它返回值代表什么含义,需要程序的开发者向程序的用户说明)。返回-1代表程序运行没有得到想要的结果。

接下来认识几个

1 Strcmp函数

在linux下用man 3 strcmp查看这个函数的用法:

这里写图片描述

Strcmp(const char *s1,const char *s2)
比较s1和s2的字符串大小 如果s1比s2大的话,返回一个大于零的数,相等的话,返回0,如果s1比s2小的话,就返回一个小于0的数。

strcmp函数调用实例:

这里写图片描述

这里写图片描述

我们可以自己来写一个比较字符串的函数:

这里写图片描述

调用自己写的函数 比较两个数125和124的大小:

这里写图片描述

结果:
这里写图片描述

2 strlen函数

在ubuntu系统下查看strlen函数的用法
计算字符串s的长度 单位是字节 不包括字符串的结尾 \0

这里写图片描述

我们可以编辑一个自己的统计字符串字节的函数如下:

#include<stdio.h>
int my_strlen(char *p)
{
    int i = 0;
    //p[i]不为0的时候,就执行i++统计 
    while(p[i])
    {
        i++;
    }
    return i;
}
int main(void)
{
    char str[] = "hello";
    printf("strlen=%d\n",my_strlen(str));
 } 

程序执行结果为 5 分别是 h 、e, l, l, o。


memset函数

这里写图片描述

memset调用实例:

将字符数组写0
这里写图片描述
将字符数组里面的字符替换为字符0
这里写图片描述

我们可以自己写一个memset函数来实现其功能如下:
将字符数组里面的字符全部替换成了b
这里写图片描述


strcpy函数

strcpy 是依据 /0 作为结束判断的,/0会被拷贝。如果存放的空间不够,则会引起 buffer overflow。
这里写图片描述

strcpy调用实例

这里写图片描述

自己写一个strcpy的函数如下:

这里写图片描述


memcpy函数

(1)从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
(2)如果目标数组dest本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。
这里写图片描述

memcpy调用实例

这里写图片描述


strcpy和memcpy的区别

1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符”\0”才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。


请编写一个 C 函数,该函数给出一个字节中被置 1 的位的个数。

被调函数主体:
这里写图片描述
主函数主体:
这里写图片描述
运行结果:
3二进制存的里面有两个1
这里写图片描述


strcat函数

(1) 函数原型
char *strcat(char *dest, const char *src);

(2) 函数说明

dest 为目的字符串指针,src 为源字符串指针。strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。

注意:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。

(3) 返回值
返回dest 字符串起始地址。


strncat

原型:extern char *strncat(char *dest,char *src,int n);

库文件:#include

网络字节的转换函数

  htonl()--"Host to Network Long" 
  ntohl()--"Network to Host Long" 
   htons()--"Host to Network Short" 
    ntohs()--"Network to Host Short"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值