AI智能推荐题库-试题通 AI智能整理导入题库-试题通
×
首页 题库中心 c语言选择判断题库 题目详情
CA4E3A01C46000013755684012D01E55
c语言选择判断题库
379
单选题

1、第141题 (1.0分) 题号:657 以下不能正确进行字符串赋初值的语句是()。

A
 char str[5]=“good!”;
B
 char str[]=“good!”;
C
 char *str=“good!”;
D
 char str[5]={'g','o','o','d'};

答案解析

正确答案:A

解析:

这道题考查的是 C 语言中字符串的初始化规则,特别是字符数组长度与字符串内容(包括结束符 `\0`)之间的关系。 **正确答案是:A** ### 详细解析: 在 C 语言中,字符串是以空字符 `\0` 结尾的字符数组。因此,存储一个字符串所需的内存空间至少比字符串的有效字符数多 1 个字节,用于存放 `\0`。 我们逐一分析各个选项: **A. `char str[5]="good!";` (错误)** * 字符串 `"good!"` 包含 5 个可见字符:`'g'`, `'o'`, `'o'`, `'d'`, `'!'`。 * 加上隐含的结束符 `\0`,总共需要 **6** 个字节的空间。 * 然而,数组 `str` 被显式定义为长度为 **5**。 * 当使用字符串常量初始化字符数组时,如果数组长度不足以容纳整个字符串(包括 `\0`),编译器通常会报错或发出警告,因为这会导致缓冲区溢出或无法正确形成字符串(缺少 `\0`)。在标准的 C 语言规范中,这种初始化是不合法的,因为初始值列表过长。即使某些编译器允许截断,它也不能“正确”地作为一个以 `\0` 结尾的字符串进行初始化。因此,这是不能正确进行字符串赋初值的语句。 **B. `char str[]="good!";` (正确)** * 这里没有指定数组长度,编译器会根据字符串常量的大小自动计算数组长度。 * `"good!"` 有 5 个字符 + 1 个 `\0` = 6 个字节。 * 编译器会自动将 `str` 定义为 `char str[6]`,并正确初始化。这是完全合法的。 **C. `char *str="good!";` (正确)** * 这里定义的是一个字符指针 `str`,它指向字符串常量 `"good!"` 的首地址。 * 字符串常量存储在静态存储区,指针本身只占用指针大小的内存(如 4 或 8 字节),不涉及数组长度的限制问题。这是完全合法的。 **D. `char str[5]={'g','o','o','d'};` (正确)** * 这里使用字符列表进行初始化,而不是字符串常量。 * 数组长度为 5,提供了 4 个字符 `'g', 'o', 'o', 'd'`。 * 根据 C 语言规则,如果初始化列表中的元素个数少于数组长度,剩余的元素会被自动初始化为 0(即 `\0`)。 * 因此,`str[0]='g', str[1]='o', str[2]='o', str[3]='d', str[4]='\0'`。 * 这形成了一个有效的字符串 `"good"`,且没有越界。这是完全合法的。 ### 总结: 选项 A 中,数组空间不足(5 字节)以容纳包含结束符的字符串 `"good!"`(需 6 字节),导致初始化失败或不正确。其他选项均符合 C 语法规则。
题目纠错
c语言选择判断题库

扫码进入小程序
随时随地练习

关闭登录弹窗
专为自学备考人员打造
勾选图标
自助导入本地题库
勾选图标
多种刷题考试模式
勾选图标
本地离线答题搜题
勾选图标
扫码考试方便快捷
勾选图标
海量试题每日更新
波浪装饰图
欢迎登录试题通
可以使用以下方式扫码登陆
APP图标
使用APP登录
微信图标
使用微信登录
试题通小程序二维码
联系电话:
400-660-3606
试题通企业微信二维码