无法输出字符串“her”的是?A.char a[ ]={'h','e','r','\0'}; B.char a[ ]={'h','e','r',0};puts(a); puts(a);C.char a[4]={'h','e','r','0'-48}; D.char a[4]={'h','e',0,'r'};puts(a); puts(a);
2 回答
onemoo
TA贡献883条经验 获得超454个赞
你知道 C 语言字符串是“以 null 字符结尾的一串字符”,这个 null 字符通常写作 '\0',对吧。 所以你知道 A 选项可以输出 "her"。
回想一下用转义方式表示字符的写法,其中一种就是“\八进制数”,所以 '\0' 不是什么特殊表示法,这其实就是八进制数转义为字符的写法。既然 C 语言规定 '\0' 是 null 字符,也就是说 null 字符的值其实就是整型数 0。
那么初始化列表中的 0 就会将字符数组中相应元素赋为 null 字符。
B 选项的写法和 A 选项有同样的结果。
D 选项自然只能打印出 "he"
C 选项嘛。如果假定使用 ASCII 编码,那么初始化列表最后一项 '0' 的编码就是 48,相减后这一项是 0,其实和 B 选项是一样的。当然也能打印出 "her"。 这里如果我说题目不严谨可能有点吹毛求疵了,不过确实无法保证所有编码中 '0' 的值都是 48。
最后提示下:虽然整型数 0 作为 char 类型就是 null 字符,但最好在你需要使用 null 字符时明确写 '\0',不要依赖整型 0 自动转型为 char。
- 2 回答
- 2 关注
- 1165 浏览
添加回答
举报
0/150
提交
取消