为了账号安全,请及时绑定邮箱和手机立即绑定

长度跟字符N的关系

在用第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 回答

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

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

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

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

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

5 回复 有任何疑惑可以回复我~
#1

qq_圓圓_0 提问者

非常感谢!
2015-10-17 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

长度跟字符N的关系

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信