C語言中定義字符串有哪些方法?
首先是數組,存放在棧區,可讀可寫,操作起來很方便。
char s1[] = "helloworld";初學者容易寫成這樣:
chars1[32]; s1="helloworld";不過編譯的時候就會提示錯誤,因為數組名是指針常量,地址不能修改。
第二種是字符串常量,存放在只讀數據區。
char*s2 = "helloworld";既然是只讀,就是不能修改的意思,非要修改,就是段錯誤。
s2[0] = 'x';
編譯運行結果:
root@Turbo:test# ./test Segmentation fault (core dumped) root@Turbo:test#第三種先在堆上申請空間,然后用字符串拷貝函數把字符串拷貝進去,用完記得釋放空間。
char*s3=(char*)malloc(128); strcpy(s3,"helloworld"); free(s3);初學者容易寫成這樣:
char *s3 = (char *)malloc(128); s3= "helloworld"; free(s3);編譯沒問題,但是運行的時候,直接異常退出。
原因就是,本來指針s3指向一塊堆空間:
![c38f3566-cee4-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/76/wKgZomTngYeAXnkJAAcIQEKtWBk083.png)
執行:
s3="helloworld"語句后,你以為是把字符串賦值給這塊堆空間:
![c3c4c3a2-cee4-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/76/wKgZomTngYeAAnw8AAcir4TKscI825.png)
其實是重新給指針s3賦值:
![c405e67a-cee4-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/76/wKgZomTngYeAUykmAAb3Xkq7i3c477.png)
s3原來指向堆內存,現在指向只讀數據區,去釋放這塊空間,當然是不允許的。
最后,給大家留一個關于字符串的筆試題,如果你知道答案,歡迎在文章下方留言。
![c488e098-cee4-11ed-bfe3-dac502259ad0.png](https://file1.elecfans.com//web2/M00/99/76/wKgZomTngYiAXfDjAAg-PN0ucuI593.png)
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C語言
+關注
關注
180文章
7604瀏覽量
136824 -
字符串
+關注
關注
1文章
579瀏覽量
20516 -
指針
+關注
關注
1文章
480瀏覽量
70563 -
編譯
+關注
關注
0文章
657瀏覽量
32871 -
數組
+關注
關注
1文章
417瀏覽量
25947
原文標題:C語言定義字符串的幾種方法
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
C語言中字符串拷貝函數有幾種方法?
strcpy,即string copy(字符串復制)的縮寫。 是C語言標準庫中實現字符串拷貝的一個函數。 各大公司筆試題最喜歡考的一道題,快來看看,你會
C語言-字符串處理
字符串在C語言里使用非常多,因為很多數據處理都是文本,也就是字符串,特別是設備交互、web網頁交互返回的幾乎都是文本數據。 這篇文章就介紹字符串
評論