选择题

有如下程序:
#include<stdio.h>
#include<string.h>
main()
{
char a[]="THIS\0",*b="OK\0\0";
printf("%d,%d,%d,%d",strlen(a),sizeof(a),strlen(b),sizeof(b));
}
程序运行后的输出结果是

【正确答案】 A
【答案解析】

strlen()函数求得参数中字符串的长度(不包括字符串结束符'\0'), sizeof()运算符求得参数这种类型所占存储空间的长度。 题意中 a 是数组名, 由于定义时省略维数大小, 数组大小是初始化的字符个数, a 的数组大小为 6。 综上所述, strlen(a)只计算字符'T'、'H'、 'I'、 'S', 结果为 4; sizeof(a)是求得数组 a 的大小, 结果为 6; 另外指针 b 指向一个字符串“OK\0\0”, 所以 strlen(b)只计算字符'0'、 'K', 结果为 2; sizeof(b)求得指针占用存储空间的大小, 结果为 4。 故本题答案为 A 选项。