【问题标题】:after delete endl in cout << "hello" << endl, my C++ program stopped working在 cout << "hello" << endl 中删除 endl 后,我的 C++ 程序停止工作
【发布时间】:2018-01-06 12:03:03
【问题描述】:

这是我的代码。这段代码可以运行良好。 但是当我在“cout This is what I get when delete endl

#include <iostream>
#include <cstring>

using namespace std;
int main()
{
    char * name;
    char * n = "aaaa";
    strcpy(name, n);
    cout << name;
    cout << "Hello world!" << endl;
    return 0;
}

以下是删除endl的代码

#include <iostream>
#include <cstring>

using namespace std;
int main()
{
    char * name;
    char * n = "aaaa";
    strcpy(name, n);
    cout << name;
    cout << "Hello world!";
    return 0;
}

【问题讨论】:

  • 请在您的帖子中复制/粘贴错误消息,而不是提供图片链接
  • 也许读过strcpy reference

标签: c++


【解决方案1】:

让我们看看这些行:

char * name;
char * n = "aaaa";
strcpy(name, n);

变量name 未初始化。它的内容是不确定的,并且看起来是随机的。将其用作strcpy 调用的目的地将导致未定义的行为

如果要使用 C 风格的字符串,则需要为 name 分配内存,例如使用数组:

char name[128];

但是,如果您实际上是在使用 C++ 进行编程,为什么不使用标准库附带的很棒的类呢?比如非常擅长处理字符串的std::string类:

#include <string>
#include <iostream>

int main()
{
    std::string name;
    std::string n = "aaaa";

    name = n;

    std::cout << name << '\n';
    std::cout << "Hello world" << std::endl;
}

【讨论】:

    【解决方案2】:

    name 是一个未初始化的指针:它指向某个随机内存位置。当你 strcpy 到它时,你在那个位置践踏了五个字节,用 aaaa\0 替换它们。

    正式地说,这是未定义的行为。在实践中,您目睹了两种不同的症状:无明显效果和崩溃。

    name 指向您实际拥有的足够大的缓冲区,一切都会好起来的。

    【讨论】:

      【解决方案3】:


      char * name;
      此行“名称”未初始化并包含垃圾。
      而是执行以下操作:

       using namespace std;
       int main(){
      
         char name[10];
         char  *n = "aaaa";
         strcpy(name, n);
         cout << name;
         cout << "Hello world!";
      
         return 0;
      }
      

      【讨论】:

        【解决方案4】:

        您正在复制到垃圾地址。

        char * name; //<<<garbage address
        char * n = "aaaa";
        strcpy(name, n);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-03
          • 1970-01-01
          • 2012-05-14
          • 1970-01-01
          • 2017-05-13
          • 2020-03-19
          相关资源
          最近更新 更多