字符串用字符数组来存储
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";
可以指定或不指定字符数组大小。
网友评论