如果希望记录 10 个最长为 99 字节的字符串,可以将字符串数组定义为 char s[10][100];。
这道题其实是在考两个常识:一是C++字符串必须以\0结尾,二是数组下标从0开始。看到'最长99字节',脑子里马上要弹出'99字符+1个\0',然后确认10个这样的字符串怎么排,直接对应二维数组的行列定义,就能秒选A。
最容易栽跟头的就是死记硬背'100字节存99字符',却忘了命题人特意强调'最长为99字节',这其实是在暗示'字符串本身占99字节',而存储时必须额外留1字节给\0。还有少数同学会把'10个'和'100'搞混,以为10个字符串就要用100列,其实第一维才是数量,第二维才是单行长度。
本题考查C++数组定义与字符串存储的基本常识,核心是'空字符\0'占位和数组维度对应关系。
在C++里,字符串不是随便一堆字符,它必须以一个特殊的字符\0(空字符)结尾,程序读到这个符号就知道'字符串到此结束'。所以,如果一个字符串最长能有99个可见字符,那它在内存里实际占用的字节数必须是99+1=100字节。
题目特意说'最长为99字节',这是在玩文字游戏:它想让你以为99字节就够了,其实99字节只能存98个字符(因为第99字节被\0占用了)。只有定义长度为100的数组,才能稳稳装下99个字符+1个\0。这就是这道题唯一的陷阱。
看到'10个最长99字节的字符串',第一步先算单个字符串需要多少空间:99字符+1个\0=100字节。第二步想怎么排:10个这样的字符串,自然用二维数组,第一维管数量(10),第二维管单行长度(100)。所以定义char s[10][100]完全正确。
单个字符串长度上限:99(字符)+1(\0)=100字节。 数组第一维:10(对应10个字符串)。 数组第二维:100(对应单个字符串所需空间)。 定义式:char s[10][100];
千万别只背'100字节存99字符',要记住'99字符+1个\0'才是完整的存储需求。如果题目改成'10个最长98字节的字符串',那数组就得是char s[10][99];如果题目说'10个字符串,每个最多99个字符',那数组必须是char s[10][100]。命题人就是靠这种细微差别来区分你是否真正理解。
从题库数据看,'数据表示'类题目共考过103题,覆盖12个级别,其中2023年考了23题,2024年考了30题,2025年考了20题,2026年考了10题,呈逐年上升态势。'数据存储单位'(含字节/位概念)共考过52题,2023年考了10题,2024年考了4题,2025年考了7题,2026年考了5题,说明这类基础概念题在近期考试中频率很高,尤其是GESP四级、三级、二级等中级别。
基于2023-2026年'数据表示'和'数据存储单位'考频持续走高,且GESP四级近年考题中此类基础定义题占比明显增加,未来考试仍可能侧重考查学生对数组维度、字符串存储细节(如\0占位)的精准理解。预计命题人会继续用'最长X字节'这类表述设置陷阱,测试学生是否真正掌握'字符数+1'的存储规则。暂无足够依据预测具体题型变化,但基础概念题的考查热度不会降温。