字符串用字符數組來存儲
const int ARRAY_SIZE = 40;
char string[ARRAY_SIZE];
scanf("%s", string);
printf("%s", string);
// 輸入:
aaa
// 輸出:
aaa
如果scanf
函數的轉換說明用%c
替代%s
,那么它只會讀取輸入的第一個字符
const int ARRAY_SIZE = 40;
char string[ARRAY_SIZE];
scanf("%c", string);
printf("%s", string);
// 輸入:
aaa
// 輸出:
a##########... // a后的#表示不確定的字符
原因:使用%c
只會讀取輸入的第一個'a'
,然后存儲到string[0]
,后面的兩個'a'
不會被讀,所以string[1]
至 string[39]
后面的內容無法確定,打印內容取決于原先這塊內存存儲的是什么內容。
實際上,上面的printf("%s", string)
會打印出存儲在string[0]
后面不定數量的字符,直到找到空字符 '\0' 為止。這是%s
轉換說明的結果。
字符串一定是字符數組,字符數組不一定是字符串。
它們的唯一區別在于:字符串末尾有空字符'\0',字符數組沒有。
例:
const int ARRAY_SIZE = 40;
char char_array[ARRAY_SIZE];
char string[ARRAY_SIZE];
// 字符數組 char_array
char_array[0] = 'a';
char_array[1] = 'a';
char_array[2] = 'a';
// 字符串 string
string[0] = 'a';
string[1] = 'a';
string[2] = 'a';
string[3] = '\0'; // *唯一區別
printf("char_array = %s\n", char_array);
printf("string = %s\n", string);
// 輸出:
char_array = aaa######..... // 該輸出原因解釋同上
string = aaa
字符串的初始化賦值方法:
char str[40] = "aaa";
// 或
char str[] = "aaa";
可以指定或不指定字符數組大小。