畢竟,我必須聲明我是一個初學C++和編程的整體。 我會直指點。我想知道是否可以將任何大小的字符串分配給指向字符的指針(不是數組,只是一個char *指針)。這會違反任何內存地址嗎? 我正在學習的這本書似乎沒有提到這方面的任何內容。我似乎無法在Google上找到任何內容。將任意大小的字符串賦給指向字符的指針
回答
A char
指針可以指向任意長度的字符串,因爲字符串的長度由您在字符串中遇到NUL
(0)字節時確定。當你以這種方式存儲字符串時,它會變成一個C字符串。例如:
const char* str = NULL; // at this point,
// doesn't point to anything (not even a string)
str = ""; // valid
str = "a"; // valid
str = "hello"; // valid
str = "farewell, cruel world"; // valid
不會有點長的字符串會覆蓋某些只讀內存位置嗎? – T0rm3nt0R 2012-02-26 05:04:30
我想到的另一個問題是爲什麼動態內存操作符會使用new和delete來確定指針變量將佔用的大小?似乎可以使他們的指針完全像他們想要的那樣大,而不必使用動態內存。 我正在學習的這本書使用新的和刪除來指示只是他們需要的大小,根據我能夠理解的內容,這看起來很奇怪。 – T0rm3nt0R 2012-02-26 05:06:33
@ T0rm3nt0R,Seth示例中的所有字符串都可能位於只讀內存中,如果這就是您要求的內容。如果一個字符串來自用戶輸入,那麼動態地爲字符串分配空間可能非常有用。 – 2012-02-26 05:14:16
你有你的字符指針,並要動態地創建C字符串
char *str;
說。這個指針將被用來指向字符串的第一個字符。該字符串是內存中的一系列連續字符(字節)。我們怎樣在內存中實現這一點:
str -> +---+---+---+---+---+----+
| H | E | L | L | O | \0 |
+---+---+---+---+---+----+
注意最後一個字節 - 這個字節的值是0,是調用空字符 - 它代表字符串的結尾,使一個easilty知道,當我們有走到最後。
給str
一個值ne分配這個內存。在C++中,這通過0這樣
str = new char[6];
注新做有兩個版本新[]和新 - 一個是分配對象的陣列,另一種是分配一個單獨的對象。當你使用new []分配它時,總是使用delete [],同樣應該使用new/delete。不要混合刪除新[],刪除[]
這將分配一個由6個字符組成的數組來放置字符串。爲了將字符放入字符串中,我們冷做到這一點。
str[0] = `H`;
str[1] = `E];
...
str[5] = 0;
但是,這將是單調乏味的。相反,我們可以使用strcpy爲我們做到這一點:
strcpy(str, "hello");
它知道所有有關的空字符。在這些類型的字符串上有一系列的功能 - 請參閱string
這是C字符串。曾幾何時,有人發明了這種稱爲C++的新語言。這種語言使用了一種叫做對象的不同想法,這使得這件事更容易。您需要查看標準模板庫(或STL)。關於這些字符串的注意事項可在string找到。有很多在STL的好東西 - 這裏是一個參考STL
希望這有助於
- 1. 將值賦給字符串指針
- 2. 使用指針將字符賦給char *
- 3. 指向字符串的指針向量
- 4. 使用指向字符串的指針初始化指向字符串中的字符的指針
- 5. 將字符串傳遞給接受指向字符的指針的函數
- 6. 指向字符的指針
- 7. 指向字符串的指針陣列
- 8. 指向字符串的指針
- 9. 指向字符串C的指針
- 10. 傳遞指向字符串的指針
- 11. 指向字符串的指針數組
- 12. 指向字符串指針的數組
- 13. 指向字符串的指針
- 14. 指針,指向函數的字符串
- 15. 指向字符串的指針 - C
- 16. 指向字符串的指針
- 17. Wrtiting字符串內存流 - 指向字符串的指針
- 18. 大小字符數組和字符指針的大小的
- 19. c字符指針賦值
- 20. 指定字符串指向字符指針
- 21. C指針,指向和字符串
- 22. 指針指向字符串和STRCMP
- 23. 指向字符串的指針無法更改字符
- 24. 使用指針指向字符串中的某些字符
- 25. 將一個字符串數組賦給一個空指針
- 26. 將字符指針分配給字符指針數組
- 27. Ç指定字符串指針到其他字符串指針
- 28. C++,SQLite - 指向字符串的指針的指針
- 29. 指針指向在C的字符串指針數組++
- 30. 字符串指針
'爲const char * PTR =「任何大小的字符串」;'是有效的。除非您佔用字符串文字的整個只讀位置。 – Mahesh 2012-02-26 04:58:38
你的意思是如果字符串太長會發生錯誤?這就是說,如果指針指向只讀內存位置,是嗎? – T0rm3nt0R 2012-02-26 05:02:44
「違反內存地址」是什麼意思? – 2012-02-26 05:13:29