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

