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
相关产品推荐
相关产品推荐

