C語言復習之字符串

C語言中沒有String這種類型。其實字符串就是字符序列,由多個字符組成,所以在C語言中,我們可以用字符數組來存儲字符串

  • 字符串可以看做是一個特殊的字符數組,為了跟普通的字符數組區分開來,應該在字符串的尾部添加了一個結束標志'\0'。'\0'是一個ASCII碼值為0的字符,是一個空操作符,表示什么也不干。所以采用字符數組存放字符串,賦值時應包含結束標志'\0'。

字符串的初始化

    char s[] = {'D', 'X', '\0'};
    char s[3] = {'D', 'X', '\0'};//如果是字符串,不加上后面的  \0,有可能造成內存溢出
    char s[] = "DX";   //體統會自動在后面補上   \0
    char s[3] = "DX";
    
    char s[3];
    s[0] = 'D';
    s[1] = 'X';
    s[2] = '\0';

    char [20] = "DX";

字符串的輸出

  • printf
char a[] = {'D','X','\0'};
printf("輸出a----%5s\n",a);

上面的%5s\n中 5 代表的是給出5個字節的空間來打印字符串a,比如上面字符串a占3個字節,你給出了5個字節的空間,多了2個,打印的出來字符串就會右對齊。多余的字節空間就會被空格代替。\n代表換行

輸出a----   DX

如果你把5變成-5,那就會左對齊

輸出a----DX   Program ended with exit code: 0
  • puts
    puts要注意的是puts函數一次只能輸出一個字符串,printf函數則可以同時輸出多個字符串
    puts函數輸出一個字符串后會自動換行。

字符串后面少了\0的情況

  • 我們來看一個例子
    char a[] = {'D','X','\0'};//添加了 \0
    char b[] = {'K','Y'};//沒有添加 \0
    
    printf("輸出a----%s\n",a);
    printf("輸出b----%s\n",b);
    //下面的是輸出的結果
    輸出a----DX
    輸出b----KYDX

字符數組a和字符數組b在內存的排列位置是按照代碼順序,先從下往上開始排,就如上面的代碼先從b開始的,然后才是a。可以看下面的圖比較直觀(地址我是隨便寫的,只是為了直觀)

屏幕快照.png

printf函數很傻的,它只會從你想輸出的字符數組第一個開始,直到'\0'結束。所以上面字符數組b沒有包含'\0',那就會繼續輸出,把字符數組a的內容也輸出來了。所以切忌不要忘了寫上'\0'。如果地址中字符數組b排在a的后面呢?那你輸出字符數組b的時候,由于后面找不到結束的'\0',那系統就會自動幫你補上一些亂七八糟的東西(運氣好也有可能不補上,直接輸出你想要的內容)

字符串的輸入

  • scanf
char a[10];
scanf("%s", a);

scanf函數會從a的首地址開始存放用戶輸入的字符,存放完畢后,系統會自動在尾部加上一個結束標記\0
注意,不要寫成scanf("%s", &a),因為a已經代表了數組的地址,沒必要再加上&這個地址運算符。

  • gets
char a[10];
gets(a);

gets跟scanf一樣,會從a的首地址開始存放用戶輸入的字符,存放完畢后,系統會自動在尾部加上一個結束標記\0。

  • gets一次只能讀取一個字符串,scanf則可以同時讀取多個字符串
  • gets可以讀入包含空格、tab的字符串,直到遇到回車為止;scanf不能用來讀取空格、tab
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容