C语言的字符数组和字符串

字符串用字符数组来存储

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";

可以指定或不指定字符数组大小。

你可能感兴趣的:(C语言的字符数组和字符串)