C語言基礎--數組( 二 )


文章插圖
打印字符串的時候遇到'\0'就停止打印,字符數組含有'\0'就是字符串 。
注意:char c[] = "hello",用" "括起來的就是字符串 , 此時編譯器會自動在后面加上\0,在內部其實是這樣的額char c[] = {'h','e','l','l','o','\0'} 。
scanf和getsscanf 遇到空格結束,遇到\n結束,所以用scanf這種方式并不是很好,有時候想要讀取一個hello world遇到空格結束,只能讀取到hello 。

  • gets(str)允許輸入的字符串有空格
  • scanf不允許含有空格
  • 但是scanf和gets都有一個很致命的缺點,就是如果存放讀取字符的空間不足,會自動向后存儲 , 會造成內存污染,假設給定的字符空間是num[5]大小是5,但是如果輸入的字符大小超過5 , 依舊會存儲 , 此時會自動覆蓋后面空間的內容,會造成內存污染
fgets
C語言基礎--數組

文章插圖
示例:
#include<stdio.h>int main(){ char buf[5] = ""; fgets(buf, sizeof(buf), stdin); printf("%s\n", buf); return 0;}運行結果如下:
C語言基礎--數組

文章插圖
fgets會把回車鍵\n讀取,但是scanf和gets遇到\n會結束讀取 。
有一種情況 , 定義了一個數組char a[3];,輸入的時候輸入的是a+回車,那么此時用fgets獲取char數組內的內容就是a[3] = {'a','回車','\0'};
如何去掉\n?
只需要將\n替換成\0
示例:
char buf[128] = "helloA";//buf[5]=0;int i=0;while(buf[i]!='\0'){ i++;}buf[i-1] = '\0';printf("%s\n",buf);strlensize_tnstrlen(const chars);
功能:計算指定指定字符串s的長度,不包含字符串結束符‘\0’
參數:s:字符串首地址
返回值:字符串s的長度 , size_t為unsigned int類型
fgets相對于scanf和gets不會污染內存(安全),但是fgets會讀取\n,所以只需要將\n去掉就可以了 。
字符數組輸出函數printfchar buf[1024] = "hello world";printf("%s\n",buf)打印字符串的時候遇到'\0'就停止打印 。
puts*

推薦閱讀