首页 > 试题广场 >

有如下程序段,则程序输出?

[单选题]
有如下程序段:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    char a[] = "xyz", b[] = {'x', 'y', 'z'};
    if (strlen(a) > strlen(b))
        printf("a > b\n");
    else
        printf("a <= b\n");

    return (0);
}

则程序输出:
  • a>b
  • a<=b
  • 编译不通过
  • 以上都不对
推荐
char a[] = "xyz", b[] = {'x', 'y', 'z'};
a容易理解,strlen(a)=3;
b是数组,元素在内存中是连续存储的,而strlen函数求字符串长度是要以'\0'结尾,但是b没有'\0',
strlen的内部函数指针会一直向后搜索,直至找到'\0',内存中的其他区域也是有数据的,只是没有意义,
所以,strlen的指针最后指到哪里无法确定,但是结果肯定大于等于3.


编辑于 2017-06-03 11:14:31 回复(3)
strlen(b)是一个不确定的值,但是可以确定的是一定大于等于3!所以答案选B没有问题!
发表于 2015-06-03 22:56:33 回复(10)
所以为什么选B呀,B答案不是a吗,难道这题答案不应该是a<=b吗
发表于 2022-05-16 10:11:03 回复(4)
实际上在release模式下,strlen(b)是确定的,因为局部变量压栈是连续的,这样 strlen(b)就是6;
但是在debug模式下,因为变量在内存中并不连续,所以 strlen(b)不确定, 但貌似中间空缺多少个字节也是有规律的
编辑于 2015-10-02 19:53:56 回复(3)
这个printf里都没有单独的a为啥会选b呢
发表于 2021-12-02 10:01:07 回复(1)
strlen当遇到\0也就是内存字节数值为0才统计结束,第一种方***自己加上\0,所以是3,而第二种没有默认\0,所以往后寻找,只会大于3
发表于 2016-04-12 14:41:55 回复(1)
strlen函数是从第一个元素开始到遇到第一个'\0'为止字符的个数,由于第二个数组中结束符 '\0'位置未知,所以>=3.
发表于 2015-09-04 22:05:14 回复(0)
因为strlen() = 3, strlen(b) = 3;
所以选B
编辑于 2017-06-03 11:14:23 回复(13)
这个答案一个"a"真的吗? 我怀疑是不是做到了假的牛客
发表于 2023-08-06 14:25:22 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	char a[] = "xyz", b[] = {'x', 'y', 'z'};
	printf("len(a)==%d,len(b)==%d\n",strlen(a),strlen(b));
    if (strlen(a) > strlen(b))
        printf("a > b\n");
    else
        printf("a <= b\n");
         
	return 0;
}
 

发表于 2016-04-20 17:17:08 回复(0)
这个答案解析有点问题,strlen应该是要查找'\0'结束的,所以strlen(b)值会大于3
发表于 2017-03-29 09:59:19 回复(0)
这个return (0)是这样写返回值吗??好奇怪啊
发表于 2023-08-24 20:17:55 回复(0)
我在跑VC++6.0时输出的b的长度是7

发表于 2019-03-01 14:28:35 回复(0)
注意不是sizeof
发表于 2016-07-27 19:08:16 回复(1)
输出a?不是a<=b吗
发表于 2023-11-23 11:24:26 回复(0)
答案错了吧,ab不是相等的?
发表于 2023-09-04 09:14:29 回复(0)
所以为什么是打印 a 呢?题目问题?
发表于 2023-02-21 13:01:58 回复(0)
输出a <= b 吧
发表于 2023-02-21 09:57:25 回复(0)
strlen()计算字符串长度 是根据 遇到内存中的'\0' 进而停止计数的!
  因此   char a[]="xyz"     虽然  a中存放四个元素 'x' 'y' 'z' '\0'  {后面才是随机值},但 strlen(a)= 3
但是   b中 只有 'x' 'y' 'z'  三个元素  {后面为随机值!} 因此 strlen(b)往后找'\0'停止时候,必然strlen(b) >=3 了“如果恰好最后一个'z' 后面的随机值是'\0' 那就等于3哈哈哈 ”

发表于 2021-06-04 20:21:22 回复(0)
哪位大神讲解一下,用qt编译后strlen(b)=6,不是随机值!!!
发表于 2020-11-06 19:21:07 回复(0)

在b字符数组中找不到\0但strlen 肯定大于等于3


发表于 2018-09-19 23:10:21 回复(0)