【问题标题】:what happens when I run char * name1 = new char[ 6 ]; strcpy( name1, "Henry" ); char * name2 = name1; name1[0] = 'D';当我运行 char * name1 = new char[ 6 ]; 会发生什么strcpy(name1, "亨利");字符 * 名称 2 = 名称 1;名称1[0] = 'D';
【发布时间】:2018-05-10 08:02:12
【问题描述】:

我想知道当我运行这段代码时 name1 和 name2 的值会变成什么:

#include <iostream>

using namespace std;

void main()
{

    char * name1 = new char[ 6 ];
    strcpy( name1, "Henry" );

    char * name2 = name1;

    name1[0] = 'D';
}

我的程序说除了警告之外没有任何问题

'strcpy':这个函数或变量可能不安全。考虑使用 strcpy_s 代替。

要禁用弃用,请使用 _CRT_SECURE_NO_WARNINGS。

每次我运行程序时都没有任何反应,它只是显示一个空白屏幕,显示按任意键继续。

【问题讨论】:

  • 您期待某种输出吗?这里没有任何东西产生输出。
  • 为什么屏幕上不打印任何内容时会显示任何内容?
  • name1和name2的值没有变化吗?
  • 为什么只是改变一个值会打印出任何东西?

标签: c++ char


【解决方案1】:

只需在代码底部添加 std::cout &lt;&lt; name1 &lt;&lt; " " &lt;&lt;name2 &lt;&lt; std::endl;,你会看到奇迹。

别忘了delete[] name1;

【讨论】:

    【解决方案2】:

    name 1 和 name 2 都是具有相同值的指针,指向在堆上创建的 char 数组,长度为 6,内容为 'D','e','n','r', 'y','\0'

    你需要在屏幕上打印一些东西才能看到发生了什么

    std::cout << name1 << std::endl;
    std::cout << name2 << std::endl;
    

    【讨论】:

    • 不需要删除或 strcpy,但行为未定义:尝试更改字符串文字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 2015-03-12
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多