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

C语言strcpy函数使用报错求助:我的代码存在哪些问题?

你的代码存在明确错误,根源是缓冲区溢出

问题分析

  • 你定义的newS数组通过"Bye"初始化,它的实际大小是4字节(包含字符串末尾的'\0'终止符)。
  • 而oldS存储的"Hello"需要5字节空间(同样包含'\0')。
  • strcpy会把源字符串的所有字符(包括终止符)完整复制到目标数组,但newS的空间不足以容纳oldS的内容,这就触发了缓冲区溢出——超出目标数组的内存边界写入数据,破坏了程序的内存布局,最终导致"非法硬件指令"这类未定义行为。

修正方案

有两种简单可行的修正方式:

  1. 显式给newS分配足够容纳目标字符串的空间:
#include<stdio.h>
#include<string.h>

int main() {
    char oldS[] = "Hello";
    char newS[10]; // 分配足够大的空间,确保能容纳要复制的字符串
    strcpy(newS, oldS);
    puts(newS);
}
  1. 让编译器自动推导足够的空间(适合提前知道目标字符串长度的场景):
#include<stdio.h>
#include<string.h>

int main() {
    char oldS[] = "Hello";
    char newS[] = "Hello"; // 初始化时分配刚好容纳该字符串的空间
    strcpy(newS, oldS); // 后续可以正常覆盖
    puts(newS);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:45:38