strcpy,memcpy和memset的用法

1、strcpy的用法,把一个字符串的内容拷贝给另一个字符串。

函数的原型如下

_CRTIMP char *  __cdecl strcpy(char *dest, const char *src);

把src字符串的内容赋值给dest,当然dest要有足够的空间能放得下src拷贝过来的字符串,拷贝的过程中src遇到'\0'字符串就停止了。

#include<stdio.h>
#include<string.h>

int main(void) {
	char dest[30];
	char *src = "123456789";

	strcpy(dest, src);
	puts(dest);

	return 0;
}

运行结果:123456789

如果src的空间长度不够的话,运行就崩了。像这样。

2.memcpy是对内存的拷贝,不局限于字符串的拷贝。

_CRTIMP void *  __cdecl memcpy(void *dest, const void *src, size_t n);

函数里面有三个参数,从src地址开始拷贝指定n个字节长度到dest里面去。

#include<stdio.h>
#include<string.h>

int main(void) {
	char dest[30];
	char *src = "djis\0sejfidsjfoi";
	int i;
	FILE *fp;

	memcpy(dest, src, sizeof(char) * 15);
	dest[15] = '\n';		//注意要加上0结束标志
	for(i = 0; i < 15; i++) {
		printf("[%c]", dest[i]);
	}

	return 0;
}

虽然src字符串中间有一个\0但是拷贝的是一段内存上存放的值,最终还是会拷贝这一段字符串的内容到dest。

输出结果:[d][j][i][s][ ][s][e][j][f][i][d][s][j][f][o]

memcpy不仅可以用于字符串拷贝,可以拷贝任何类型void*,传递的参数可以指向任何类型。

可以拷贝一段数组元素

#include<stdio.h>
#include<string.h>

int main(void) {
	int dest[10] = {0};
	int src[] = {1, 2, 3, 4, 5, 6,7};
	int i;

	memcpy(dest, src, sizeof(int) * 6);
	for(i = 0; i < 10; i++) {
		printf("[%d]", dest[i]);
	}

	return 0;
}

输出结果:[1][2][3][4][5][6][0][0][0][0]

3、memset 用于格式化一段内存,将一段内存全部设为某个字符

_CRTIMP void *  __cdecl memset(void *src, int ch, size_t n);

将src开始后面n个字节内存的内容都赋值为ch所对应的Ascll码。

#include<stdio.h>
#include<string.h>

int main(void) {
	char src[20];
	int i;
	
	memset(src, 'X', 10);
	
	for(i = 0; i < 20; i++) {
		printf("[%c]", src[i]);
	}

	return 0;
}

输出结果:[X][X][X][X][X][X][X][X][X][X][ ][ ][][ ][ ][ ][ ][ ][ ][ ]

猜你喜欢

转载自blog.csdn.net/yvken_zh/article/details/80425966