C C語言中Char字符串的問題匯總


有些題目在定義函數的時候采用的是char指針或者字符串傳參,自己習慣STL的string,不太熟悉。所以這里對C語言中的Char數組做個總結;

 

關於Char字符串的初步概述:

相當於Int數組,只不過是char類型的。

但是需要注意的是Char數組在定義的時候一定要注意,結尾的'\0'是占一個位置的,如果忽略該字符,會導致異常的錯誤;

 

每一個char[]都以終結字符作為結尾,注意一下;

 

關於Char數組的長度問題:

注意關於sizeof和strlen的問題,兩者的計量標准不同;

1.對於strlen來說,計量標准為字符串數組中的非終結符字符個數;

2.對於sizeof來說,計量標准為字符串中的所有位數,包含非終結符號;

對於相同的字符串char[]="12345";

strlen的結果為5;

sizeof的結果為6;

所以一般來說統計實際字符個數用strlen,而一般開辟賦值使用sizeof;

 

關於Char* 和 Char[] 的數組問題:

首先,對於C語言來說,char*是一種比較特殊的存在。

在之前OJ的題目中,有一道題有這樣一個坑:

 

之前遇到這個問題,發現char* 傳進去並不能改變實參,本質上的問題在於沒有理解char*指針是個什么東西; 

 

char[]本質上就是一個連續的區域,內部存儲char元素;

一般的賦值語句:

char str[]="123124124";

str通常可以表示為一個指針,也就是char*,這個指針指向連續的數組區域;

例如str[0]的地址為0x001;

則char*表示的是一個單元內的內容,是0x001,也就是裝着首字符的地址;

在通常情況下,char[]數組可以直接用char*來進行表示;

 

其次,重要的是訪問問題;

盡管當str作為char*指針存在,但是由於字符串數組的特殊性質,可以直接對其進行下標訪問,而不用使用指針的解引用訪問;

但是一定要注意范圍,因為如果不知道范圍,有可能越界。

這個玩意不像C++的string,越界會報錯;

 

 

因此對於該題目中,如果按照形參不傳引用而是直接拷貝,則代表兩個指針同時指向原來的char數組的首個元素;

所以對於自己起初的錯誤寫法,針對於函數內部有:

c=(char*)molloc(sizeof(s)+1);

則改變的是c指向的空間,也就是重新開辟了一個數組,和之前的實參指針半點關系都沒用,函數結束就自動銷毀;

 

所以如果理解指針的特性,直接采用對指針指向的區域進行改造:

 

 則直接就會把傳進來的字符串進行改造,使得不用傳引用就可以進行修改;

 

關於char數組的賦值問題:

關於賦值問題也要注意一下;

通常來說char數組賦初值有以下幾個方式:

1.直接指定:

 

 2.開辟空間:

這一般是進行重新賦值的時候;

c = (char*)malloc(sizeof(s) + 1);

之后再利用strlen進行填補也可以;

當然也可以利用strcpy,但是注意,空間一定要開的足夠大,並且賦值的時候,編譯器會默認在結尾加上'\0';

利用該函數也可以對其進行string STL庫賦值,只不過要用string.c_str()函數;

 

注意:關於截斷功能;

對於一個字符串,如果想從中間截短,直接在其中一位賦值'\0',即可截斷;

個人覺得應該是在統計字符個數和輸出時候,都以'\0'來作為結尾的;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM