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',打印结束。

    评论

报告相同问题?

悬赏问题

  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常