长度跟字符N的关系

来源:6-7 字符串与数组

qq_圓圓_0

2015-10-15 22:07

在用第2中格式定义字符串 char 字符窜名称[长度m]={'字符1'',字符2','...','字符n','\0'} 中

字符串的长度m 跟 字符n 的关系是什么 是m=n? m=n+1?  还是m>n?

还有下面这段代码为何运行结果是 bcef?

#include <stdio.h>
int main()
{
    char s1[4]={'ab','c','de','f','gh','\0'};
    printf("%s\n",s1);
    return 0;    
}


写回答 关注

1回答

  • onemoo
    2015-10-15 23:46:38
    已采纳

    这个代码中有很多不正确或不规范的地方。

    • 你在定义s1数组时指定了数组大小为4,但却用一个超过4个元素的列表去初始化它。在编译时会有警告的。

    • 单引号用来表示单个字符,应该括起单个字符。 不过C也确实允许括起多个字符,这特性叫multi-character,然而C标准对多个字符在内存中如何存储没有规定。

      gcc在小端机器上好象是把最后一个字符放到低地址位上,这样一来用 'ab' 给数组元素初始化时,数组中的元素得到的是 'b' 这个字符。所以数组得到的前4个字符为 b c e f,后面有留空,这空白在printf中被当作了'\0',作为字符床的结尾,所以最后会输出bcef。

    在实际写代码时千万不要这样写!

    qq_圓圓_...

    非常感谢!

    2015-10-17 18:37:48

    共 1 条回复 >

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926021 学习 · 20793 问题

查看课程

相似问题