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

使用strcpy函数后字符串无法正常打印输出的原因是什么

C++ strcpy使用无输出问题原因分析

strcpy是C标准库提供的字符串复制函数,签名为char *strcpy(char *dest, const char *src),第一个参数为目标缓冲区,第二个参数为源字符串,会将源字符串的全部内容包括末尾的\0结束符复制到目标缓冲区。

你的代码存在两个核心问题,均会导致无有效输出:

  • 参数顺序不符合预期:你当前写的strcpy(s, r)是将空字符串r复制到s,执行后s会被覆盖为空串,此时打印两个变量均为空,自然看不到有效内容。
  • 目标缓冲区空间不足:如果你原本想实现的是将s的内容复制到r,首先参数顺序需要调换,其次你定义的char r[] = ""只会让编译器给r分配1字节的存储空间(仅能存储\0结束符),而s的内容总长度为11字节(10个可见字符+1个结束符),写入时会直接越界覆盖栈内存,触发未定义行为,大概率导致程序直接崩溃退出,不会执行后续的打印逻辑。
修复方案

方案1:C风格字符串实现,手动分配足够空间

#include <iostream>
#include <string.h>
using namespace std;
int main() {
    char s[] = "john lemon";
    // 分配足够容纳s内容的缓冲区,预留结束符位置
    char r[12] = "";
    // 修正参数顺序:目标在前,源在后
    strcpy(r, s);
    cout << s << "   " << r;
    return 0;
}

方案2:C++推荐实现,使用std::string避免手动内存管理

#include <iostream>
#include <string>
using namespace std;
int main() {
    string s = "john lemon";
    string r;
    // 直接赋值即可完成复制,无越界风险
    r = s;
    cout << s << "   " << r;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:36:02