长度跟字符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; }
在用第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; }
2015-10-15
这个代码中有很多不正确或不规范的地方。
你在定义s1数组时指定了数组大小为4,但却用一个超过4个元素的列表去初始化它。在编译时会有警告的。
单引号用来表示单个字符,应该括起单个字符。 不过C也确实允许括起多个字符,这特性叫multi-character,然而C标准对多个字符在内存中如何存储没有规定。
gcc在小端机器上好象是把最后一个字符放到低地址位上,这样一来用 'ab' 给数组元素初始化时,数组中的元素得到的是 'b' 这个字符。所以数组得到的前4个字符为 b c e f,后面有留空,这空白在printf中被当作了'\0',作为字符床的结尾,所以最后会输出bcef。
在实际写代码时千万不要这样写!
举报