博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c内存及字符串操作
阅读量:2140 次
发布时间:2019-04-30

本文共 2584 字,大约阅读时间需要 8 分钟。

<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 
#include
其函数功能是把从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://wdtgf.baihongyu.com/

你可能感兴趣的文章
博客文格式优化
查看>>
【托业】【新托业全真模拟】疑难语法题知识点总结(01~05)
查看>>
【SQL】group by 和order by 的区别。
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
Loadrunner之https协议录制回放报错如何解决?(九)
查看>>
python中xrange和range的异同
查看>>
列表、元组、集合、字典
查看>>
【Python】easygui小甲鱼
查看>>
【Python】关于Python多线程的一篇文章转载
查看>>
【Pyton】【小甲鱼】文件
查看>>
【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜
查看>>
【Pyton】【小甲鱼】异常处理:你不可能总是对的
查看>>
APP性能测试工具
查看>>
【Pyton】【小甲鱼】类和对象
查看>>
压力测试工具JMeter入门教程
查看>>
作为一名软件测试工程师,需要具备哪些能力
查看>>
【Pyton】【小甲鱼】类和对象:一些相关的BIF(内置函数)
查看>>