qq_43323545
2018-10-15 12:57
采纳率: 50%
浏览 382
已采纳

数组的初始定义的问题,求大佬帮小白解答?

书上说字符型数组char str[4]{"a","b","c""\0"}
必须结尾加\0才表示字符串,那如果char str[4]{"a","b","c"}表示字符串吗?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • madan77 2018-10-15 14:23
    已采纳

    首先数组初始化不能这么赋初始值,“a”表示字符串,而非字符。
    有如下两种初始化方式:
    char str[4] = {'a', 'b', 'c', '\0'}; 注意是单引号
    char str[4] = "abc"; 注意,这是可以自动补0结尾的。(如果此处数组长度为3,则引发越界)

    至于你的问题,如果是定义成:
    char str[4] = {'a', 'b', 'c'}; 这种形式理解为字符数组初始化,而非字符串。

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 菜鸟学习笔记 2018-10-15 13:43

    是的,没有“\0”的话,会自动在末尾加上,但是定义的数组要有足够的空间。

    评论
    解决 无用
    打赏 举报
  • threenewbee 2018-10-15 16:30

    char str[4]{"a","b","c"}表示字符串
    这个是一个字符串,但是是一个很危险的字符串。
    因为c语言作为一种早期低级的语言,它的数组非常原始,是无法确定长度的(也许你说可以用sizeof,那是编译器的魔法,放在函数里就不行了)
    字符串如果没有\0,那么像printf、strcpy、strlen这样的函数,因为不知道字符串到哪里算结束,会沿着内存一直找下去,要么访问到非法的内存,要么输出一堆乱码。
    不但你那么写是危险的,
    char str[4] = "abc";
    str[3] = 'd';
    这么写也是一样。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题