如何避免使用memcpy函数出现半个汉字
答案:2 悬赏:0
解决时间 2021-02-27 09:33
- 提问者网友:柠檬香
- 2021-02-26 17:27
如何避免使用memcpy函数出现半个汉字
最佳答案
- 二级知识专家网友:都不是誰的誰
- 2021-02-26 18:47
你确定要用memcpy操作汉字?
memcpy函数是用来操作ASCII字符的,汉字不在ASCII范围内。另外不同的编译器给一个汉字的内存空间是不一样的,比如我的编译环境,我定义一个char *s = "你好",占用5个字节,若使用memcpy(dest,s,2)就会出现乱码,只有当memcpy的第三个参数大于等于5时才会拷贝成功。
memcpy函数是用来操作ASCII字符的,汉字不在ASCII范围内。另外不同的编译器给一个汉字的内存空间是不一样的,比如我的编译环境,我定义一个char *s = "你好",占用5个字节,若使用memcpy(dest,s,2)就会出现乱码,只有当memcpy的第三个参数大于等于5时才会拷贝成功。
全部回答
- 1楼网友:桑稚给你看
- 2021-02-26 19:11
该例子说明几个问题
1. mem开头的函数基本上都是对内存操作的,
它们不管内存里放的是什么数据,只要给出长度,它们就操作。
不像strcpy、strcmp等函数一定以'\0'结尾,而且是字符。
mem可以操作可见字符、不可见字符、控制字符等,任意数据都可以。
2. memcpy是内存复制函数
原型:
void * memcpy(void *dest, void const *src, unsigned int length);
功能:从src的起始位置复制length个字节到dst的内存起始位置。你可以用这种
方法复制任何类型的值,第3个参数指定复制值的长度(以字节计)。
如果src和dst以任何形式出现了重叠,它的结果是未定义的。
3. memset函数
原型:void * memset(void *a, int val, unsigned int length);
功能:把从a开始的length个字节都设置为值val。
例子:memset(buffer, 0, size);
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯