1. 程式人生 > >【C++】字元與字元陣列

【C++】字元與字元陣列

字元是什麼

共分為4種

字母:a b c ... z

數字:0 1 2 3 ... 9

標點:+ - * / . ; ,等等

控制字元:Tab, Enter等等

用ascii碼來表示以上字元,例如65 <=> 'A',97 <=> 'a',48 <=> '0',49 <=> '1',43 <=> '+',32 <=> ' '(這裡是空格),9 <=> '\t'等等。

#include "stdio.h"

int main()
{
    printf("%c %c \n", 'A', 65);
    printf("%c %c %c", '1', ' ', '2');

    return 0;
}

/*
//run out:
A A
1   2

*/

字元陣列

字元陣列最後是有一個結束符0或者'\0',所以char str[6]的陣列長度為6,但只能儲存5個字元。

#include "stdio.h"

int main()
{
    //初始化第一種方式
    char str[6] = {'b', 'e', '1', '2', 'o', '\0'};
    //第二種方式
    char str1[5] = "hell";
    //第三種方式
    char str2[] = "aa";

    //char str3[6] = {'b', 'e', '1', '2', 'o', 'B'};不會報錯,但是由於沒有結束符,printf會一直讀取記憶體,然後直到遇到結束符0為止。這時這段程式碼就不可預測,所以不能這樣使用。

    printf("%c \n", str[4]);
    printf("%s \n", str1);
    printf("%s", str2);

    return 0;
}

/*
//run out;
o
hell
aa
*/

注意事項:

1)陣列足夠大,有效字串最大長度=陣列長度-1;

2)不以0結束的字串,不是正常的字串;

3)0之後的字元不會被打印出來。

不妨看個例子鞏固下:

#include "stdio.h"

int main()
{
    char str[6] = {'b', 'e', 0, '2', 'o', '\0'};
    char str1[5] = "hell";
    printf("%c \n", str[4]);
    printf("%s \n", str1);
    printf("%s", str);

    return 0;
}

/*
//run out:
o
hell
be
*/

從結果可以看出,列印單個字元str[4]時,結果依舊為o,這表明str所有都被初始化了。而使用prinft在列印整個str時,只打印了be,這是因為printf遇0就停了。