c++字元指標

來源:互聯網
上載者:User

標籤:

  對於C/C++中的 字元指標和字元數組,總是在碰到的時候無法確定而不得不現場測試,來確定末尾是否包含‘\0‘,函數到底如何使用等等。真是勞民傷財,現在總結一下:

字元指標的賦值

(1)指向一個字串常量

char *src = "abcded"; //這種方式由系統自動給該字元指標指定了一個記憶體中的位置,並且該位置的字元數組為{‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘d‘, ‘\0‘};

如果此時再次對 src賦值,src = "mmmt", 則src指向另外一個由系統指定的記憶體塊。這種方式賦值的src為一個指向字串常量指標,不能對src指向的位置的內容做改變的操作,即不能執行 *src = ‘a‘, *(src+1) = ‘t‘ 等操作;但是可以改變src指向的位置,即像之前的 src = "mmmt";

(2)指向一個字元數組

char tmp[4] = {‘a‘, ‘c‘, ‘e‘, ‘f‘};

char* src = tmp;  

(3)使用  new,然後可以像字元數組一樣賦值,即指向一個字元數組

char* src = new char[10]; //這種方式由程式在堆記憶體上開闢了一個數組,並將地址賦值給src

 

字串常量和字元數組比較

(1)字串常量由系統自動分配一個記憶體地區,且該地區中的內容不能改變(即無法通過指向該字串的指標進行修改);

(2)字元數組或者為系統自動分配的全域資料區或棧上的記憶體,或者通過new操作來分配的堆上的記憶體,字元數組中的內容可變(即可以通過指向該字元數組的指標進行修改)。

(3)字元數組中不預設含有‘\0‘,除非明確賦值,而字串常量在末尾自動含有 ‘\0‘.

 

strcpy的使用

(1)用strcpy時候, 如果源字串是一個字元指標,則沒有問題,因為字元指標自動帶‘\0‘,在‘\0‘位置複製結束;

  而如果源是一個字元數組(即將字元數群組轉換為字元指標來使用),則將會從字元數組的首地址開始複製,如果字元數組中明確指定了‘\0‘元素,則會在‘\0‘處停止,而若沒有‘\0‘元素,則程式可能會不停的複製,直到在程式的記憶體中碰到‘\0‘,這樣可能會得到不希望的結果。

(2)用strncpy的時候注意,這裡只管複製n個字元,如果前n個字元中含有‘\0‘,則會在‘\0‘處停止,否則,一直複製n個。

  在寫程式的時候,如果目的字串之前沒有被memset清空,下次使用strncpy來為它賦值,則有可能它之前的長度大於n,則會導致不期望的結果。比如

char* dst = "abcdedf";

char* src = "12345";

strncpy(dst, src, 3);

則dst此時變為了 123dedf

 

c++字元指標

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.