[英]Memory allocation by a string declaration
當我聲明這樣的字符串時:
char string[] = "Hello";
實際上等同於-
char string[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
因此,通過其聲明為字符串分配了堆棧上的內存。 但是當我聲明這樣的字符串時會發生什么:
char *string = "Hello";
變量“字符串”包含字符串“ H”的第一個字母位於內存中的地址。 我想問一下:
字符串在內存中的位置? 棧\\堆\\等。
是否為該字符串自動分配了足夠的內存,或者我必須自己為該字符串分配內存(例如,通過malloc
)? 如果需要的話,我該怎么做(我想舉一個例子的代碼)?
我想指出,我的問題的答案很有可能取決於系統。 如果是這樣,請注意這一事實,並嘗試根據流行平台(Windows,Linux等)上發生的情況進行回答。
沒有定義char *string = "Hello";
被儲存了。 實際上,它通常位於稱為文本段的只讀存儲器中,用於存儲程序代碼。 指針存儲在“堆棧”中還是數據段中,具體取決於定義是在函數內部還是在任何函數外部。
您無需執行任何操作即可為字符串分配內存。
答案與系統無關(除非系統可以將字符串存儲在任何方便的位置,並且不同的系統可以將字符串存儲在不同的位置)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.