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

C++如何不使用strcpy将字符串首个空格前内容拷贝到另一字符串

问题分析

你代码的核心问题如下:

  • 初始化后的string2长度为0,没有预分配内存空间,直接通过下标[i]赋值属于非法越界访问,触发未定义行为,自然无法得到预期结果。
  • 本身操作C++的std::string不需要用到C风格的strcpy函数,标准库提供的成员方法就能满足需求。
正确实现方案

方案1:最小改动原有逻辑

仅需要把循环内的赋值操作改为字符追加即可,+=运算符会自动管理string的内存扩容:

#include <iostream>
#include <string>

using namespace std;
    
int main() {
    string string1;
    string string2;

    cout << "String1:" << endl;
    getline(cin, string1);

    for (int i = 0; (i < string1.length()) && (string1[i] != ' '); i++){
        string2 += string1[i];
    }

    cout << string2;
    return 0;
}

方案2:使用std::string内置方法简化代码

直接用find定位首个空格的位置,再用substr截取对应片段即可,无需手动实现循环:

#include <iostream>
#include <string>

using namespace std;
    
int main() {
    string string1;
    string string2;

    cout << "String1:" << endl;
    getline(cin, string1);

    size_t spacePos = string1.find(' ');
    // 找到空格就截取到空格位置,未找到空格则取整个字符串
    string2 = string1.substr(0, spacePos);

    cout << string2;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:27:02