C语言问题。数组字符串长度问题。我写的对不对啊,分为实际长度和函数计算长度。

如题所述

char s[10]="abc"; //实际占用10个字节,strlen计算长度为3,正确
char s[]="abc"; //实际占用4个字节,strlen计算长度为3,正确
char s[10]={'a','b','c'}; //实际占用10个字节,strlen计算长度为3,正确
char s[]={'a','b','c'}; //实际占用3个字节,strlen计算长度为(随机值),不是3,因为这个只明确了s是一个有三个元素的字符数组,第四个元素已经是非法空间了。
char s[3]="abc"; //编译通不过,因为"abc"需要4个字节,而s[3]只有3个字节的空间。
char s[3]={'a','b','c'}; //实际占用3个字节,strlen计算长度为(随机值)追问

说的太好了。可是我觉得倒数第二个能通过,只是不能当做字符串数组使用

好吧,确实会编译出错

追答

环境不同吧,我的VS2005编译不能通过。VC6.0可能可以吧。c标准本身可能没有这样的限制,但是不同的编译器会做些优化,检查会严格一些,避免不必要的错误。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-19
有一些错误
s[3]="abc";这样是编不过的 超出界限 有一个\0没地放
另外 我不知道你函数 你是怎么处理的 但如果只是简单的 传入s然后用sizeof的话 那结果肯定是指针长度 32位系统下 值是4 所有都是 不论你 定义多长 赋多少值 如果是用strlen的话 那就和你的结果相同了追问

VC环境下不报错,用strlen函数

追答

这都不报错 我不知道你的是什么情况 但最好不要这样搞 毕竟大家都知道 "abc"这是个 const
char[4] 我在VS下试了 是会报错的

第2个回答  2015-01-19
看不清追问

放大了看

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网