2017-02-28 16 views
2

如果在編譯時未知大小,這是否被認爲是在固定char數組上動態分配的?我的老師說:「在C++中,你不能分配與變量length.You固定數組必須動態地分配固定改編 2.列出項目如何在編譯時未知大小的情況下動態分配固定字符數組?

AYS如果大小在編譯時已知的。」 如何在編譯時如果size不知道n就動態地分配固定char數組?我試過兩個例子。我不知道是否正確。

#include<iostream> 

int main() {  
    std::cout<<"enter the length of string\n";  
    int length; 
    std::cin>>length; 
    char *ch=new char[length];  
    for(int i=0;i<length;i++)  
     std::cin>>ch[i]; 
    std::cout<<ch; 
    delete[]ch;  
    ch=nullptr;//c++11 is accepted 
    } 

它打印沒有whitespace的字符串。我無法在這裏打印空白。這不顯示whitespce。

2)

int main() {  
    char *ch=new char; 
    std::cout<<"enter a string\n";  
    std::cin.getline(ch,255);  
    std::cout<<ch<<'\n'; 
    delete[]ch; 
    ch=nullptr;//c++11 is accepted ## Heading ## 
    std::cout<<" after null pointer:"<<ch; 
} 

這被認爲是對固定字符數組動態分配,如果尺寸不知道在編譯時或這兩者都是不正確?

+1

'的char * CH =新的char ;'只分配一個'char'。 'std :: cin >> ch [i];'跳過空格。你可以使用'noskipws'來關閉它。 –

+3

這是'std :: vector'的用途。 –

+0

你不是null-terminating'ch'。 –

回答

1

第一個關於「C++中的動態數組分配」是正確的。它看起來有點奇怪,但它會做。

只是爲了讓一個有效點:

  • 宣佈爲char *是正確
  • 分配通過new char[ size ];也是正確的。因爲這會使您的數組在運行時固定大小。 (除非你用不同大小刪除和新一遍)
1

你的第一個例子是正確的,第二隻一個分配內存單char,你不想要的。

但是,如果你想與任何已知的編譯時間長度的動態數組,那麼你應該使用std::vector讓生活更容易爲你和你的代碼不易出錯:

std::cout<<"enter the length of string\n";  
int length; 
std::cin>>length; 
std::vector<char> ch(length);  
for(int i=0;i<length;i++)  
    std::cin>>ch[i]; 
ch.push_back('\0'); 
std::cout<<ch.data(); 
相關問題