[英]dynamic allocation (arrays) with string or char
這里沒有問題:
int *x;
x = (int *) malloc(0 * sizeof(int));
int value = 5;
x = (int *) realloc(x,(value)*sizeof(int));
但是我不能為字符串做:\\
我想對ay []數組執行此操作,如下所示:
y[0]="hello"
y[1]="how are you"
我怎樣才能做到這一點?
std::vector<std::string> y;
y.push_back("hello");
y.push_back("how are you");
不要在C ++中使用malloc
, realloc
或free
。 請勿將char*
用於互操作以外的目的。 遠離指針,直到真正需要它們為止(與數組相同)。
您不能在std::string
對象數組上使用realloc
,因為realloc
通過位復制來移動事物,而這在常規對象上是不允許的。
標准類std::vector
是對象的通用容器,可以正確移動和復制對象(使用復制構造函數,賦值和類似方法),並且可以使用resize
方法更改其大小。 所有需要的內存都會根據需要自動分配和釋放。
例如,使用std::vector
可以編寫如下代碼:
std::vector<std::string> v; // An empty vector
v.resize(10); // Now size is 10 elements (all empty strings "")
v[0] = "Hello"; // First element is now the string "Hello"
v[1] = "world."; // Second element is now the string "world."
v.resize(2); // Now v.size() is 2
v.push_back("How's going"); // Now the size is 3 and third element is filled.
幫自己一個忙,拿起一本不錯的C ++書 ,從頭到尾閱讀它。 C ++是一種功能強大但復雜的語言,如果您嘗試通過嘗試使用編譯器來學習它,則由於許多原因,您會犯下嚴重的錯誤。
您現在正在執行的操作不是C ++ ...您可以使用C樣式的字符串來完成所需的操作,但是您將需要一個指針數組來鍵入char
類型,該數組允許您訪問數組中每個字符串的已分配內存。 可以這樣完成:
char* y[2];
y[0] = strdup("hello");
y[1] = strdup("how are you");
您還需要記住,您的y
數組現在“擁有”了指針,因此,如果您決定更改每個指針所指向的字符串,則必須在數組中的每個指針上調用free()
以避免內存泄漏。 。
如果您想使用慣用的C ++解決方案,而不是恢復為C樣式的字符串,那么您應該使用std::string
和std::vector
...這樣做可以避免內存泄漏以及分配問題並取消分配與動態分配的C字符串關聯的內存。
實際上,您可以完全按照整數執行所需的操作:
typedef const char *c_string;
c_string *y;
y = (c_string *) malloc(0 * sizeof(c_string));
int value = 5;
y = (c_string *) realloc(y,(value)*sizeof(c_string));
y[0]="hello";
y[1]="how are you";
但是,這不適用於非const char *
,因此此示例的可用性受到限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.