c内存及字符串操作

<stdlib.h> 头文件中


1   void *calloc(int num, int size);
在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是0。
2    void free(void *address); 
该函数释放 address 所指向的内存块,释放的是动态分配的内存空间。
3    void *malloc(int num); 
在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。
4    void *realloc(void *address, int newsize)
该函数重新分配内存,把内存扩展到 newsize。

注意:void * 类型表示未确定类型的指针。C、C++ 规定 void * 类型可以通过类型转换强制转换为任何其它类型的指针。

mem系列函数(memset memcpy memmove)
> memcpy、memset和memset三个函数在使用过程中,均需包含以下头文件:
//在C中         #include <string.h>
//在C++中    #include <cstring>


1.    void  memcpy ( void * dst,const void * src,size_t count)
memcpy函数是C/C++中的内存拷贝函数,它的功能是从源src所指的内存地址的起始位置开始,拷贝n个字节到目标dst所指的内存地址的起始位置中。

 

2.  void memset(void *s, int c, size_t n)

memset一般用于对内存初始化,在这里需要注意的是,memset函数是对内存的每个字节(按字节)设置成c的值, 长度为n,存放在s所指向的起始地址。

 

3.   void* memmove(void* dest, void* src, size_t count)

它与memcpy的功能相似,都是将src所指的n个字节复制到dst所指的内存地址的起始位置,不同的是它处理了src和dst有重叠的情况。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。

 

str函数---字符串操作

1.  strcpy

strcpy是C语言的标准库函数,使用strcpy需要包含以下头文件:

#include <string.h>
#include <stdio.h>
其函数功能是把从src地址开始且含有NULL结束符的字符串复制到dst开始的地址空间,返回指向dst的指针。 

2. strncpy
char *strncpy(char *destin, char *source, int len);
功能:将source指向的len个字符串拷到destin

3. strcat
char* strcat(char * str1,char * str2); 
功能: 把字符串str2接到str1后面,str1最后的'\0'被取消

4. strncat
char *strncat(char *dest, const char *src, size_t maxlen)
功能: 将字符串src中前maxlen个字符连接到dest中

5. strcmp 
int strcmp(char * str1,char * str2); 
功能: 比较两个字符串str1,str2
返回: str1<str2,返回负数;str1=str2,返回 0;str1>str2,返回正数

6. strncmp
int strncmp(char *str1,char *str2,int count)
功能: 对str1和str2中的前count个字符按字典顺序比较
返回: 小于0:str1<str2,等于0:str1=str2,大于0:str1>str2

7. strchr
char* strchr(char* str,char ch); 
功能: 找出str指向的字符串中第一次出现字符ch的位置 
返回: 返回指向该位置的指针,如找不到,则返回空指针

8. strrchr 
char *strrchr(const char *s, int c) 
功能: 得到字符串s中最后一个含有c字符的位置指针
返回: 位置指针

9. strstr 
char* strstr(char* str1,char* str2);
功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符) 
返回: 返回该位置的指针,如找不到,返回空指针

10. strnset 
char *strnset(char *s, int ch, size_t n) 
功能: 将字符串s中前n个字符设置为ch的值 
返回: 指向s的指针

11. strset 
char *strset(char *s, int ch) 
功能: 将字符串s中所有字符设置为ch的值 
返回: 指向s的指针

12. strtok 
char *strtok(char *s1, const char *s2)
功能:分解s1字符串,用特定分隔符(s2)分隔成多个字符串
返回: 字符串s1中首次出现s2中的字符前的子字符串指针
strtok()在参数s1的字符串中发现参数s2中包涵的分割字符时,则会将该字符改为\0字符。在第一次调用时,strtok()必需给予参数s1字符串,往后的调用则将参数s1设置成 NULL。每次调用成功则返回指向被分割出片段的指针。

13. strupr 
char *strupr(char *s) 
功能: 将字符串s中的字符变为大写

 

 

 

strcpy和memcpy的不同点

 主要分为以下三点不同:

  • 复制内容不同:strcpy只能复制字符串,而memcpy可以复制任何内容,例如字符数组,整型,结构体等
  • 复制的方法不同:strcpy不需要指定长度,它遇到字符串结束符’\0’才结束,所以容易溢出。memcpy则需要传入第三个参数来指定长度
  • 用途不同:通常在复制字符串的时候用strcpy,而需要复制其他数据类型的时候则一般用memcpy。

参考链接:  

 http://www.codeceo.com/article/mem-and-strcopy-function.html

https://www.cnblogs.com/chenzhefan/p/8185837.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值