VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 282|回复: 7

[已解决]关于字符串处理函数strcpy的运用

[复制链接]
67_avatar_middle
最佳答案
0 
donate_vip 发表于 2021-6-22 23:57:03 | 显示全部楼层 |阅读模式
求助!!!我在学习字符串处理函数strcpy时,遇到一个问题。
        char su1[3] = {'0'};
        char su2[3] = { 'a' };
        char* a = su1;
        char* b = su2;
想要将字符串su2的内容复制到su1中,如果这样写
        strcpy_s(su1, b);或者这样写
        strcpy_s(su1, su2);都是没有问题的。
但是如果这样写
        strcpy_s(a, b);就不行,会报错“函数不接受2个参数”
这个是什么原因?麻烦大神帮忙解答,谢谢!
最佳答案
31_avatar_small
2021-6-23 16:19:30
本帖最后由 cpp2019 于 2021-6-23 16:23 编辑

关于字符串处理函数strcpy的运用
  1. #include <iostream>

  2. int main()
  3. {
  4.         char a[10] = {0};
  5.         char b[10] = {"abcdefg"};

  6.         strcpy_s(a, b);

  7.     std::cout << "a: " << a << "\n";
  8.     std::cout << "b: " << b << "\n";


  9.         char a1[10] = { 0 };
  10.         char b1[10] = { "abcdefg" };

  11.         char *c = a1;
  12.         char *d = b1;
  13.         // 调用重载的strcpy_s函数,注意参数个数及参数类型
  14.         strcpy_s(c, 10, d);
  15.         std::cout << "c: " << c << "\n";
  16.         std::cout << "d: " << d << "\n";
  17.         std::cout << "a1: " << a1 << "\n";
  18.         std::cout << "b1: " << b1 << "\n";

  19.         return 0;
复制代码




上一篇:MFC添加事件处理程序后报错问题
下一篇:容器之数组
70_avatar_middle
最佳答案
47 
在线会员 发表于 2021-6-23 09:15:41 | 显示全部楼层
strcpy_s本身是有3个参数的,
不过当第一个参数是数组时,第二个参数目标地址空间大小 编译器自己能知道,就不需要传了。只需要传源地址和目标地址。
23_avatar_middle
最佳答案
4 
在线会员 发表于 2021-6-23 09:19:15 | 显示全部楼层
a和b是指针唉
67_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-6-23 13:13:22 | 显示全部楼层
tony666 发表于 2021-6-23 09:15
strcpy_s本身是有3个参数的,
不过当第一个参数是数组时,第二个参数目标地址空间大小 编译器自己能知道, ...

strcpy_s和strcpy结果是一样的,只不过用strcpy会有一个unsafe的警告。
另外 strcpy_s(su1, b);可以使用说明了源数组可以用指针,为什么目的数组不能用呢?
如果要用,怎么写才不会报警呢?
31_avatar_middle
最佳答案
22 
在线会员 发表于 2021-6-23 16:19:30 | 显示全部楼层    本楼为最佳答案   
bestAnswer
本帖最后由 cpp2019 于 2021-6-23 16:23 编辑

关于字符串处理函数strcpy的运用
  1. #include <iostream>

  2. int main()
  3. {
  4.         char a[10] = {0};
  5.         char b[10] = {"abcdefg"};

  6.         strcpy_s(a, b);

  7.     std::cout << "a: " << a << "\n";
  8.     std::cout << "b: " << b << "\n";


  9.         char a1[10] = { 0 };
  10.         char b1[10] = { "abcdefg" };

  11.         char *c = a1;
  12.         char *d = b1;
  13.         // 调用重载的strcpy_s函数,注意参数个数及参数类型
  14.         strcpy_s(c, 10, d);
  15.         std::cout << "c: " << c << "\n";
  16.         std::cout << "d: " << d << "\n";
  17.         std::cout << "a1: " << a1 << "\n";
  18.         std::cout << "b1: " << b1 << "\n";

  19.         return 0;
复制代码
67_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-6-23 22:27:29 | 显示全部楼层

您好,我想补充问一句,如果不是strcpy_s,而是strcpy,那么strcpy(c,d)可以吗?
31_avatar_middle
最佳答案
22 
在线会员 发表于 2021-6-23 22:38:47 | 显示全部楼层
虚怀若谷smile 发表于 2021-6-23 22:27
您好,我想补充问一句,如果不是strcpy_s,而是strcpy,那么strcpy(c,d)可以吗?

可以的,但在高版本VS中要在文件头部使用预处理禁用4996警告,否则编译不了。
  1. #pragma warning(disable:4996)
  2. #include <iostream>

  3. int main()
  4. {
  5.         char a[10] = { 0 };
  6.         char b[10] = { "abcdefg" };

  7.         strcpy(a, b);

  8.         std::cout << "a: " << a << "\n";
  9.         std::cout << "b: " << b << "\n";


  10.         char a1[10] = { 0 };
  11.         char b1[10] = { "abcdefg" };

  12.         char *c = a1;
  13.         char *d = b1;
  14.         // 调用重载的strcpy_s函数,注意参数个数及参数类型
  15.         strcpy(c, d);
  16.         std::cout << "c: " << c << "\n";
  17.         std::cout << "d: " << d << "\n";
  18.         std::cout << "a1: " << a1 << "\n";
  19.         std::cout << "b1: " << b1 << "\n";

  20.         return 0;
  21. }
复制代码
67_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-6-24 13:08:13 | 显示全部楼层
cpp2019 发表于 2021-6-23 22:38
可以的,但在高版本VS中要在文件头部使用预处理禁用4996警告,否则编译不了。

明白了,感谢!!!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-7-24 18:29

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表