美文网首页
C语言的字符数组和字符串

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

作者: KardelShaw | 来源:发表于2021-05-21 22:25 被阅读0次

    字符串用字符数组来存储

    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语言的字符数组和字符串

          本文链接:https://www.haomeiwen.com/subject/qrnwjltx.html