首页 > 试题广场 >

如下代码输出结果是什么?

[单选题]

如下代码输出结果是什么?

#include <stdio.h>
char buffer[6] = {0};
char *mystring() {
    char *s = "Hello world";
    for (int i = 0; i < (sizeof(buffer) - 1); i++) {
        buffer[i] = *(s + i);
    }
    return buffer;
}
int main(int args, char **argv) {
    printf("%s\n", mystring());
    return 0;
}


  • Hello
  • Hello World!
  • Hell
  • 以上全都不正确
我哭了,光注意到buffer[5]没有复制0,把最开始buffer全部初始化0忽略了
发表于 2019-10-23 17:59:20 回复(0)
楼上活在梦里!
发表于 2015-08-20 20:43:40 回复(0)
1、首先buffer是全局的并且数组每个元素初始化为0
2、buffer的前5个元素分别为h e l l o,但因为之前第六个元素为0,所有也算以'\0'结尾的字符串
发表于 2015-08-29 21:29:51 回复(3)
0 == '\0'

发表于 2016-08-19 16:30:01 回复(1)
A:Hello
拷贝字符串s前五个字符到字符数组buffer中,输出结果是"Hello"
buffer(拷贝前)
'\0'
'\0'
'\0'
'\0'
'\0'
'\0'
buffer(拷贝后)
'H'
'e'
'l'
‘l’
'o'
'\0'


发表于 2016-08-19 14:58:45 回复(1)
A
buffer是数组,sizeof(buffer)=6,所以循环执行5次。s是指向char类型的指针,s+i表示将s指向首元素后第i个位置,*(s+i)就是s[i]。所以buffer为hello。
发表于 2015-08-08 15:32:47 回复(5)
考的是sizeof()的使用方法,对数组求sizeof和对指针求sizeof的区别。buffer[6],s,s[]四个sizeof值的区别,数组求sizeof就是数组中的元素个数,s为指针其大小为指针的大小,s[]则是对字符串求长度其为字符个数+1,题中sizeof(buffer)对数组求长度,因此为6,然后进入循环赋值,获取5个字符。

发表于 2015-10-05 12:31:04 回复(0)
sizeof(buffer)之后是6    6-1=5   所以0到4的字符被替换 而buffer是全局变量 所以 他的值printf后是改变后的值  而buffer[5]的值   '\0'结束符  不变 所以可以输出 "hello"  这个字符串 
发表于 2015-08-17 15:51:08 回复(1)
关键点是buf是全局变量,内容在全局区,出了作用域内容也不会被销毁。
发表于 2018-07-02 18:16:30 回复(0)

本题隐含的一个考察点是全局变量并不会在函数返回时就没了。

发表于 2017-06-12 11:55:27 回复(0)
buffer已经全部为0,所以会有字符串结束符,否则选D
发表于 2017-03-11 00:43:11 回复(2)
答案:A
sizeof为操作符,返回输入参数占用内存大小,buffer[6]大小为6。所以循环体循环5次,返回hello
发表于 2016-08-19 18:39:25 回复(0)
全局变量不会随着函数的推出而销毁,所以buffer数组赋值有效,并且buffer数组每个位置都被初始化为‘\0’,所以最后结果为buffer[6] = {'H' 'e'  'l'  'l'  'o'  '\0'} 即"Hello".
发表于 2023-09-13 21:14:45 回复(0)
0 == '\0'。
编辑于 2018-11-28 17:52:44 回复(0)
char buf在栈内存,没有分配堆,所以函数结束就没有了,故选D
发表于 2015-08-11 23:50:11 回复(2)
指针即使前面移动过后,再次用指针加另一个下标,也还是会指向另一个的下标,而不是移动过后接着移动多少个下标,是这个意思吗
发表于 2022-11-14 09:35:38 回复(0)
考点1:局部变量s指向字符串常量区,该区一直存在 考点2:对数组名用sizeof,得到的是整个数组占用的字节数
发表于 2022-03-09 01:15:01 回复(0)
简单来说就是sizeof将'\0'也计算在内
发表于 2021-10-13 18:30:35 回复(0)
注意buffer的初始化为0,那么buffer存取hello后是有结束符的。
所以会输出hello
发表于 2016-09-05 09:43:28 回复(2)
明明记得昨天还是D的
发表于 2016-08-06 14:47:41 回复(1)