字符串的拷贝有哪些方式,以及memcpy和strcpy的区别

Posted Engraver

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串的拷贝有哪些方式,以及memcpy和strcpy的区别相关的知识,希望对你有一定的参考价值。

字符串的拷贝有哪些方式,以及memcpy和strcpy的区别

1.字符串的拷贝有哪些方式

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     //方法一:逐个字符的赋值
 8     char s1[20] = "abc123";
 9     char s2[20];
10     for (int i = 0; i < 20; i++)
11         s2[i] = s1[i];
12     cout << "s1:" << s1 << endl;
13     cout<<"s2:" << s2<<endl;
14 
15     //方法二:直接赋值
16     string s3 = "abc123";
17     string s4;
18     s4 = s3;
19     cout << "s3:" <<s3<< endl;
20     cout << "s4:" << s4 << endl;
21 
22     //方法三:strcpy函数
23     string s5 = "abc123";
24     string s6;
25     char s7[20];
26     //strcpy(s6, s5);这样会报错
27     //strcpy(s6, s5.c_str());这样会报错
28     strcpy(s7, s5.c_str());
29     cout << "s5:" << s5<<endl;
30     cout << "s7:" << s7<<endl;
31     char s8[20] = "abc123";
32     char s9[20];
33     strcpy(s9, s8);
34     cout << "s8:" << s8 << endl;
35     cout << "s9:" << s9 << endl;
36 
37     //方法四:memcpy函数
38     char s10[20] = "abc123";
39     char s11[20];
40     memcpy(s11, s10,20);
41     cout << "s10:" << s10 << endl;
42     cout << "s11:" << s11<< endl;
43     char *p = "abc123";
44     char s12[20];
45     memcpy(s12, p, strlen(p) + 1);
46     cout << "s12:" << s12 << endl;
47 
48     system("pause");
49     return 0;
50 }
51 //注意:#include <cstring>   //不可以定义string s;可以用到strcpy等函数,cout<<s3会报错
52 //注意:#include <string>    //可以定义string s;可以用到strcpy等函数,cout<<s3不会报错

2.memcpy和strcpy的区别

  (1)复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

  (2)复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

  (3)用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。
 

——如有不对的地方,非常欢迎给予指导!

以上是关于字符串的拷贝有哪些方式,以及memcpy和strcpy的区别的主要内容,如果未能解决你的问题,请参考以下文章

memcpy memmove 函数

memcpy和strcpy的区别

memcpy和strcpy的区别

strcpy&memcpy理解

实现memcpy

C语言 memcpy 函数