You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中如何使用strcpy_s实现str1与str2字符串值的互换?

代码问题排查与修正

运行结果异常的根本原因

  • 你现在的代码从头到尾只做了一件事:把str1的内容直接覆盖掉str2的原有值,完全没有修改str1本身的存储内容。所以运行完之后,str1还是你最开始输入的原值,str2被改成了和str1一样的内容,自然两个变量最终取值完全相同,从逻辑上就没实现“互换”的效果。
  • 之前写两参数版本报“需要更多参数”是正常现象:strcpy_s是VS专属的带边界校验的安全字符串函数,本身就要求必须传入3个参数,格式是strcpy_s(目标缓冲区, 目标缓冲区的总长度, 源字符串)。如果直接写标准C的strcpy(str2, str1),在VS默认的安全编译选项下还会触发警告,要求你替换成带边界检查的strcpy_s,这也是你之前会写两参数版本报错的常见原因。你现在补上长度参数之后编译不报错,只是因为你漏了交换流程的另外两步。

实现字符串互换的正确写法

C语言里的字符数组是不能直接用赋值语句互换的,必须和普通数值变量交换一样,靠临时缓冲区中转,不然直接覆盖会把原数据冲没:

  1. 建一块和原数组大小一样的临时字符数组
  2. 先把str2的原始内容存到临时数组里
  3. 把str1的内容拷贝到str2中
  4. 把临时数组里存的原str2内容拷贝回str1里

修正后的交换核心代码:

// 临时中转数组
char temp[100];
// 暂存原来的str2内容
strcpy_s(temp, sizeof(temp), str2);
// 把str1的内容给到str2
strcpy_s(str2, sizeof(str2), str1);
// 把暂存的原str2内容给到str1,完成互换
strcpy_s(str1, sizeof(str1), temp);

实用提示

  • 写strcpy_s的时候不要硬编码100当长度参数,直接用sizeof(目标数组)传长度,后续如果要调整数组大小,不用挨个改参数,能少出很多bug。

内容的提问来源于stack exchange,提问作者Kim ByeongHwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 17:57:00