2016-05-30 165 views
0

這是我的代碼。此代碼可以運行良好。 但是在「cout < <」Hello World刪除「endl」時,「< < endl;」,不能運行。 This is what I get when delete endl在cout <<「hello」<< endl中刪除endl後,我的C++程序停止工作

#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; 
} 
+3

請您的文章,而不是給一個鏈接到一個畫面裏面 – Garf365

+0

,複製/粘貼錯誤消息,也許讀了['strcpy'參考(HTTP://en.cppreference .COM/W/C /字符串/字節/ strcpy的)? – juanchopanza

回答

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

您正在複製到垃圾地址。

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

name是一個未初始化的指針:它指向某個隨機存儲單元。當你strcpy它,你踐踏五個字節在該位置,取而代之的是aaaa\0

形式上,這是未定義的行爲。在實踐中,你目睹了兩種不同的症狀:沒有明顯的效果,也沒有發生崩潰。

name在一個足夠大的緩衝區,你實際上擁有,並且一切都會好的。

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; 
} 
相關問題