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语言中没有字符串这种数据类型,可以通过char的数组来替代 字符串一定是一个char的数组...
    无忧_c063阅读 600评论 0 0
  • 上一篇中我们讲到了一维数组的使用,在一维数组中有一类最常用的叫做字符数组,我们最后的练习题就是关于这个的。 练习题...
    天花板阅读 7,535评论 14 65
  • 在现实中经常需要处理大量同类的数据,如果一个一个表示就太麻烦了,如能“一组一组”表示会方便很多。于是就有了“数组”...
    码园老农阅读 955评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,631评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,244评论 4 8