memcpy复制字符串的注意事项/memcpy不能用来拷贝类类型
strcpy复制src到dst,最后将dst的下一个位置置为'\0',所以dst是以'\0'结尾的字符串
char c1[] = "abcde";
cout << c1 << endl;
char *s = c1;
char*end = &c1[];
printf("%d\n", strlen(c1));// strlen不包括结尾的'\0'长度
printf("%d\n", sizeof(c1));//10个字节
while (s != end)
{
cout <<int( *s++) << " "; }
char c2[];//c2的元素默认初始化,值未知
for (auto x : c2)
{
cout << int(x) << endl;//转换为int输出 }
strcpy(c2, c1); //memcpy(c2, c1,strlen(c1));
for (auto x : c2)
{
cout <<int( x )<< endl;//转换为int输出 }
cout << strlen(c2) << endl;
但是用memcpy是按字节拷贝,第三个参数不大于strlen(c1)长度,就不会拷贝空字符到尾部,下面这段代码只拷贝了abcde, '\0'不会被拷贝,strlen(c2)会求出一个错误的长度
char c1[] = "abcde";
char c2[];//c2的元素默认初始化,值未知
/*strcpy(c2, c1);*/
memcpy(c2, c1,strlen(c1));
for (auto x : c2)
{
cout <<int( x )<< endl;//转换为int输出 }
cout << strlen(c2) << endl;
正确的拷贝做法是 memcpy(c2,c1,strlen(c1)+1)
memcpy的拷贝方式是void*dst和void*src都转换为char*类型的指针,按字节拷贝
memcpy可以用于int,char,struct,数组的拷贝,可以拷贝string类型吗?
int a[] = { , , , , , , , , , };
int *ap = new int[];
memcpy(ap, a, sizeof(a)*sizeof(int));
int *endp = ap + ;
while (ap != endp)
{
cout << *ap++ << " ";
}
拷贝结构体
struct {
char name[];
int age;
} person, person_copy;
int main()
{
char myname[] = "Pierre de Fermat";
/* using memcpy to copy string: */
memcpy(person.name, myname, strlen(myname) + );
person.age = ;
/* using memcpy to copy structure: */
memcpy(&person_copy, &person, sizeof(person));
printf("person_copy: %s, %d \n", person_copy.name, person_copy.age);
return ;
}
不能拷贝string类型,sizeof(string)只是求了固定大小的成员的内存和,而没有求string内部指针指向的存字符的那一段内存
如果结构体含有指针,指向某段内存,memcpy的拷贝也会失败
https://www.2cto.com/kf/201111/110916.html http://blog.csdn.net/qq_21550341/article/details/51636366
memcpy复制字符串的注意事项/memcpy不能用来拷贝类类型的更多相关文章
- 使用memcpy 复制unsigned int 型的数据
转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/53214692 函数原型: void *memcpy(void *dest, con ...
- 实现C语言字符串操作的库函数 包括基本的字符串复制 字符串长度 字符串比较等多种函数(C代码)
头文件 "mystring.h" #ifndef _MYSTR_H #define _MYSTR_H #include <stdio.h> #include <s ...
- YTU 1068: 复制字符串
1068: 复制字符串 时间限制: 1 Sec 内存限制: 128 MB 提交: 602 解决: 382 题目描述 有一字符串,包含n个字符.写一函数,将此字符串中从第m个字符开始的全部字符复制成 ...
- C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题
C#字符串数组排序 //排序只带字符的数组,不带数字的 private string[] aa ={ "a ", "c ", "b & ...
- @proprety数组字典字符串用copy和strong区别(深浅拷贝)
//// @proprety数组字典字符串用copy和strong区别(深浅拷贝).h// IOS笔记//// /* _proprety________copy_strong_________h ...
- C的memset,memcpy,strcpy 的区别 及memset memcpy memmove源码
extern void *memcpy(void *dest,void *src,unsigned int count);#include <string.h> 功能:由src所指内存 ...
- C语言 复制字符串 malloc
今天在看前辈的代码,对其中字符串复制有时候直接把指针赋给另一个指针,有的malloc一个内存,然后把整个字符串的值拷贝过来,有点费解,就研究了一下,会了之后发现也没什么奥秘,其实很简单,不过还是记录一 ...
- strcpy 复制字符串函数
#include<stdio.h> #include<assert.h> char *strcopy(char * strDest , const char * strSrc) ...
- C 复制字符串
不是C++的string, 而是C的字符串复制, 以前一直使用strcpy(), 其实也可以使用sprintf(destbuf, "%s", srcbuf); 偶有所得, 其 ...
随机推荐
- HDU2112 HDUToday
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- (三:NIO系列) Java NIO Channel
出处: Java NIO Channel 1.1. Java NIO Channel的特点 和老的OIO相比,通道和NIO流(非阻塞IO)主要有以下几点区别: (1)OIO流一般来说是单向的(只能读或 ...
- SpringBoot 集成MyBatis 中的@MapperScan注解
SpringBoot 集成MyBatis 中的@MapperScan注解 2018年08月17日 11:41:02 文火慢炖 阅读数:398更多 个人分类: 环境搭建 在SpringBoot中集成My ...
- .NET Core _linux sdk安装
根据官方介绍页面的步骤: 步骤1. sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/do ...
- php使用Socket实现聊天室功能(书中的代码)
这只是一种技术 <?php $host = "127.0.0.1"; // 指定监听的端口,注意该端口不能与现有应用的端口冲突 $port = '9505'; $null = ...
- go中基本数据类型转换为string类型的方法
代码 // 基本数据类型转换为string类型 package main import ( "fmt" "strconv" ) func main() { // ...
- Codeforces Round #425 (Div. 2) - B
题目链接:http://codeforces.com/contest/832/problem/B 题意:给定一个好字母集合(只有小写字母,除了这些外其余都是坏字母集合),给定一个匹配模式串, 模式串只 ...
- Jmeter接口测试---加解密
1.加解密的jar包放到jmeter的lib/ext目录下. 项目打jar包参考https://www.cnblogs.com/fulucky/p/9436229.html 2.在测试计划---> ...
- spring requestbody json
1 @requestbody string param 前台将jsonobject序列化成字符串 后台解析成JsonObject 2 @requestbody map<string,objec ...
- Mac xlwings aem.aemsend.EventError: Command failed: The user has declined permission. (-1743)
aem.aemsend.EventError: Command failed: The user has declined permission. (-1743) 关于mac pycharm 使用xl ...