memset()、memcpy()、strcpy()的用法
2017-12-11 21:01
429 查看
内容会持续更新,有错误的地方欢迎指正,谢谢!
作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
void是一个通用类型,使用的时候可以用int、char等等。
注意:memset()是针对字节来处理的,所以需要特别注意size_t n的正确性。
memset() 函数常用于内存空间初始化。使用之前,要加
例1:将整型数组的元素全部初始化为0。
等价于:
补充:
例2: 将整型数组的元素全部初始化为1。
由于memset();将每一字节的最后一位变成1
输出为:
16843009
16843009
16843009
16843009
16843009
这么做并不可以达到目的,注意memset是对每个字节赋值,而int有4字节(32位)
比如:
转换成10进制就是16843009
所以,memset只能对整型数组赋0或-1,赋其他的值就要用循环来实现。
为什么-1可以?因为-1的二进制形式的每一位都为1。所以,和0同理,自然可以。
而在char为一个字节的编译器里,可以这样用。
例3:将字符(一字节)型数组的元素全部初始化为1
例4:用new或malloc开辟存储空间时,一定要注意memset的最后一个参数。
memcpy()是内存拷贝函数,可以拿它拷贝任何数据类型的对象,还可以指定拷贝的数据长度。
例子:
注意:如果把sizeof(b)改成sizeof(a),会造成b数组的内存地址溢出。
strcpy()只能拷贝字符串了,它遇到’\0’就结束拷贝。
例子:
若用
memset()用法
定义:void *memset(void *s,int c,size_t n)
作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
void是一个通用类型,使用的时候可以用int、char等等。
注意:memset()是针对字节来处理的,所以需要特别注意size_t n的正确性。
memset() 函数常用于内存空间初始化。使用之前,要加
#include <string.h>
例1:将整型数组的元素全部初始化为0。
int array[5]; memset(array,0,sizeof(array));
等价于:
int array[5]={0};
补充:
int array[5]={x};//x不为0的输出为x,0,0,0,0
int array[5];的输出为内存里的残留数(未知的)
例2: 将整型数组的元素全部初始化为1。
由于memset();将每一字节的最后一位变成1
#include <iostream> #include <string.h> using namespace std; int main() { int array[5]; memset(array , 1 , sizeof(array)); for(int i = 0 ; i < 5; i++) cout << array[i] << endl; return 0; }
输出为:
16843009
16843009
16843009
16843009
16843009
这么做并不可以达到目的,注意memset是对每个字节赋值,而int有4字节(32位)
比如:
memset(array,1,sizeof(array));则array中的每个元素都被赋值成为2进制数为 00000001000000010000000100000001 的数
转换成10进制就是16843009
所以,memset只能对整型数组赋0或-1,赋其他的值就要用循环来实现。
为什么-1可以?因为-1的二进制形式的每一位都为1。所以,和0同理,自然可以。
而在char为一个字节的编译器里,可以这样用。
例3:将字符(一字节)型数组的元素全部初始化为1
memset(B , '1', sizeof(B));
例4:用new或malloc开辟存储空间时,一定要注意memset的最后一个参数。
int* count = new int[5]; memset(count, -1, sizeof(int) * 5);//正确,输出为-1,-1,-1,-1,-1 memset(count, -1, sizeof(count));//错误,输出为-1,-1,0,0,0
memcpy()用法
定义:void *memcpy(void *dest, const void *src, size_t n);
memcpy()是内存拷贝函数,可以拿它拷贝任何数据类型的对象,还可以指定拷贝的数据长度。
例子:
char a[10],b[5]; memcpy(b, a, sizeof(b));
注意:如果把sizeof(b)改成sizeof(a),会造成b数组的内存地址溢出。
strcpy()用法
定义:char *strcpy(char* dest, const char *src);
strcpy()只能拷贝字符串了,它遇到’\0’就结束拷贝。
例子:
char a[10],b[5]; strcpy(a,b);//把b拷贝到a的前五位
若用
strcpy(b,a);且a的第一个’\0’不在前5个元素里,则b会内存地址溢出。
相关文章推荐
- memset、memcpy、memmove的常见用法和区别,以及memcpy与strcpy的区别
- std::strcpy、strncpy、memset、memcpy用法
- memset,memcpy,strcpy 的用法
- memcpy strcpy memset 函数用法
- strcpy,memcpy,memset的用法与区别
- strcpy()、memcpy()与memset()的用法比较
- memcpy,strcpy,memset,strcmp相关函数的用法
- C函数之memcpy()、Memset ()、Strcpy ()函数用法
- strcpy strncpy memcpy 的用法与区别 2
- strcpy memcpy memset详解
- strcpy()、memcpy()、memmove()、memset()的内部实现
- strcpy,strncpy,strlcpy,memcpy 用法
- memset ,memcpy 和strcpy 的根本区别
- memset ,memcpy 和strcpy 的根本区别!!!!
- strcat、strcmp、strcpy、strncpy、memset、memcpy、memmove和atoi函数源码
- C++:memset ,memcpy 和strcpy 的根本区别?
- memset ,memcpy 和strcpy 的根本区别?
- memset,memcpy,strcpy,memmove,memccpy
- memset()函数详解+strcpy()+memcpy()
- 牛客 题库 memcpy memmove memset strcpy