2012-08-15 121 views
0

我想用動態指針初始化一個字符數組,用戶給出的輸入不知道數組的大小。用戶不斷地給出輸入,直到返回被按下。這裏的條件是:動態初始化字符數組

  • 使用指針初始化
  • 不通過陣列的大小預先。
+0

它是C還是C++?如果C++ - 使用'std :: vector' – amit 2012-08-15 08:20:45

+0

它是作業嗎?你需要數組還是列表? – Andrew 2012-08-15 08:21:09

+0

@amit two.C或C++中的任何一個。 – MaxSteel 2012-08-15 08:21:27

回答

3

假設一個C的問題,怎麼樣(未經測試):

char *arr = malloc(10); 
size_t size = 10, index = 0; 
int ch; 
while ((ch = getc(stdin)) != EOF && ch != '\n' && ch != '\r') { 
    if (index >= size) { 
     size *= 2; 
     arr = realloc(arr, size); /* XXX check it first. */ 
    } 
    arr[index++] = ch; 
} 
arr[index] = 0; 

如果這真是一個C++的問題,你想std::getlinestd::string

+0

我還會檢查ch!='\ r'是否安全。 – 2012-08-15 08:28:46

+0

@izomorphius良好的通話。 – cnicutar 2012-08-15 08:29:27

+1

不需要'\ r'檢查,它是多餘的; 'size'和'index'是錯誤的var-name – user411313 2012-08-15 09:06:58

0

std :: string有一個方法push_back std :: vector也可以完成這個工作。不過,如果你真的被迫使用動態數組和字符指針,我會建議你實現類似於向量中使用的重新分配策略 - 每次元素數大於當前大小時,將大小加倍。

+0

現在大多數實現將存儲塊擴展了1.5倍而不是2倍。這浪費了更少的空間,代價是更頻繁的重新分配。 – 2012-08-15 11:26:26