嚴格來講,c如下示例:語言中不存在字串資料型別,都是以字元陣列來模擬字串的;
c語言中字串是以』\0』結束的字元陣列;
c語言中的字串可以分配於棧空間、堆空間、或者唯讀儲存區;
#include #include int main()
; //str1不是字串,因為它不包含'\0',它只是乙個字元陣列
char str2=;
char* str="hello world!";
char *pstr=(char*)malloc(sizeof(char)*20);
char* p=str2;
char* p1=pstr;
while(*p!='\0')
printf("%s\n",pstr);
return 0;
}
字串的長度指的是字串中所包含的字元的個數,在c語言中即是字串中第乙個』\0』出現前的字元個數,不包含這個』\0』結束符;
c語言通過』\0』結束符來確定字串長度;
定義字元指標變數並初始化時,不用手動新增這個結束符』\0』,編譯器會預設新增;
c語言標準庫函式string.h
標頭檔案中已經有乙個函式
strlen()
可以完成這個工作,那麼如何自己實現
strlen()
函式呢?
#include #include size_t _strlen(const char* str)
return length;}
int main()
注意,和標準庫提供的strlen函式一樣,這裡的返回值為
size_t
型別,通過檢視定義可知它是乙個無符號整型,因此使用時注意!如下就有錯誤:
#include #include int main()
else
if ((strlen(s1) - strlen(s)) >= 0)
else
return 0;
}
執行結果:
分析程式,兩個條件判斷初看都應該會輸出完整的」hello world!」;可是為什麼第二個條件判斷卻輸出了」hello」??
問題出在了strlen
函式的返回值型別上,
size_t
型別實際上是乙個
unsigned int
型別,那麼第二個條件語句中:
strlen(s1) - strlen(s)
,計算的結果也是乙個無符號的整數,因此它一定大於等於0!
上面,我已經給出了乙個實現strlen先給出最終的實現:函式的方法,要想用一條語句實現,我們可以試著對它進行精簡和改進:
int _strlen(const char* str)
簡單分析一下:
回顧一下,上面的第乙個方法,原理是當前指標所指向的儲存單元的值不為』\0』那麼長度就加1現在要求用一條語句,肯定不能再使用這種方法,要換一種演算法並配合遞迴呼叫,基本原理是:如果當前指標指向的儲存空間的字,知道遇到』\0』就停止。
符不為『\\0
』,那麼整個字串的長度就應該等於指標
str+1
所指向的長度
+1;利用這種演算法加遞迴呼叫配合三目運算子就可以實現
了,但是在計算字串長度前,應該進行安全性檢查,判斷字串是否為空,因此還要配合逗號表示式,最終的結果如上所示!
char* _strcpy(const char* str,const char* newstr)
只是注意上面的while迴圈就行,其他都比較簡單! C語言字串(複習)
字串 用雙引號括起來的就是字串 字元常量 用單引號括起來的就是字元常量 abc 字串 abac 字元常量輸入輸出函式 字串的輸入輸出可以呼叫庫函式 1 gets和puts gets 函式輸入字元時,只有遇到回車符才認為字串入結束 puts 函式輸出時,遇到第乙個 0 就結束輸出 2 scanf和pr...
C語言中的字串
從概念上講,c語言中沒有字串型別 在c語言中使用字元陣列來模擬字串 c語言中的字串是以 0 結束的字元陣列 c語言中的字串可以分配於棧空間,堆空間或者唯讀儲存區 char s1 沒有 0 所以s1只不過是個單純的字元陣列 char s2 也是乙個字元陣列,但是最後乙個元素是 0 因此s2就成了c語言...
c語言中的字串
一 c語言中的字串 c語言中沒有字串型別 字串實際就是多個字元連在一起,所有可以用字元陣列來存放字串。但是使用字元陣列輸出時需要使用for迴圈 例如 這樣使用十分不方便,有沒有一種簡約的方式,讓我們一下子就能輸出呢?有但是需要改兩個地方!1.長度要 1 2.末尾要加乙個 0 然後用 s 格式化控制符...