zhou8210 2017-12-07 06:30 采纳率: 0%
浏览 886

strcpy 的奇怪运行,请问谁能解释一下?

//把字符串复制给另一个字符串,没想到是这样的结果。
//代码出错在字符串cha比ch1大,
//但为什么输出的结果这么怪呢?
#include "stdafx.h"
#include
#include
int main(int argc, char *argv[])
{

using namespace std;
char cha[]="abcde";
char ch1[]="123";//这句如改成 char ch1[]="12"; 或许还能理解 ,但为什么?

   cout<<"cha---"<<cha<<endl;
   cout<<"ch1---"<<ch1<<endl;

   cout<<"-----strcpy(ch1,cha);-----"<<endl;
   strcpy(ch1,cha);

   cout<<"cha---"<<cha<<endl;
   cout<<"ch1---"<<ch1<<endl;

   cin.get();
 cin.get();
   return 0;

}

  • 写回答

3条回答 默认 最新

  • 小優YoU 2017-12-07 07:20
    关注

    你得首先弄明白
    1、char cha[]="abcde"; 究竟存了什么
    2、cout 打印字符串的原理
    3、strcpy 复制的是什么东西

    cha 真正存储的数据是 abcde\0 ,这个数组的长度是6,不是5
    同理,ch1 存储的数据是 123\0 ,数组的长度是 4,不是3

    cout 打印 char[] 数组的时候,不管数组有多长,是一直往后打印字符,即使越界了也会继续打印,直到遇到字符 '\0' 为止。
    strcpy 复制,是不会复制 '\0' 的,只会把源数组 '\0' 之前的数据全部压到目标数组

    回到你这程序,
    strcpy(ch1,cha);

    你自己也知道,cha 比 ch1 长度要长, 于是,ch1 被改写成 abcde, 没错 '\0' 丢了
    那么 cout 打印完 abcde 只后,还一直往后打印内存数据,所以你会看到很多奇怪的内容,直到刚好有个内存块的值等于 '\0',打印结束。

    评论

报告相同问题?

悬赏问题

  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿