删除cout中的endl<< “你好”<< endl,我的C ++程序停止工作

时间:2016-05-30 11:42:04

标签: c++

这是我的代码。这段代码运行良好。 但是当我在“cout<<”Hello world!“<< endl;”中删除“endl”时,它无法运行。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;
}

4 个答案:

答案 0 :(得分:8)

让我们来看看这些内容:

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;
}

答案 1 :(得分:2)

name是一个未初始化的指针:它指向一些随机内存位置。当您strcpy时,您会在该位置抓取五个字节,并将其替换为aaaa\0

形式上,这是未定义的行为。在实践中,您目睹了两种不同的症状:没有明显的效果,也没有出现崩溃。

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

答案 2 :(得分:1)


char * name;
这行'name'未初始化并保存垃圾。
而是做类似的事情:

 using namespace std;
 int main(){

   char name[10];
   char  *n = "aaaa";
   strcpy(name, n);
   cout << name;
   cout << "Hello world!";

   return 0;
}

答案 3 :(得分:0)

你正在复制垃圾地址。

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