首页 > 试题广场 >

若有以下程序,则程序的输出结果是?

[单选题]

有以下程序

#include<stdio.h>
int fun(char *s)
{ 
    char *p=s;
    while(*p !='\0') p++;
    return (p-s);
}
int main()
{ 
    printf("%d\n",fun("goodbye!"));
}

程序的输出结果是?

  • 0
  • 6
  • 7
  • 8
推荐
Mt头像 Mt
本题主要考查了函数定义及调用,以及while循环语句,执行fun函数后,首先是找到最后一个字符的地址,然后减去第一个地址得到的就是这个字符串的长度,所以本题答案为8。
编辑于 2015-02-03 20:36:31 回复(2)
忘记感叹号了,醉了
发表于 2016-04-16 19:43:25 回复(2)
while循环之后p指向!后一位,我忽略了这点。
发表于 2017-09-29 10:25:50 回复(0)
要注意,最后指向的是\0,是第9个元素,然后减去第1个元素的指针,也就是9-1=8
发表于 2016-11-06 14:01:14 回复(0)
字符串“goodbye!”一共是8位,指针s和p初始时都指向字符串的首位,也就是'g',字符串的存储是数组形式的,数组的初始下标是从0开始的。while循环结束时指针p指向的是'!'之后的一位,值为8,而指针s的值为0。所以p-s的值为8.
发表于 2017-04-17 15:21:18 回复(0)
当时做的有点着急,现在看明白了。
首先,从main函数开始,调用fun()函数。
接着,执行fun函数里的细节,即用指针p指向s的首地址,s为1;
只要p没有遇到字符串的“结束符号”,那就自增,也就是增加到9,跳出循环,p=9。
最后,p-s,就是9-1=8.

发表于 2018-10-28 22:12:58 回复(2)
感叹号不要忘😆
发表于 2021-03-09 15:18:24 回复(0)
调用函数其实就是计算字符串的长度。为8。
发表于 2019-12-19 19:07:55 回复(0)
s为啥是一呀

发表于 2023-08-12 12:47:27 回复(0)
p指针指向s的首地址,为47824812,while循环中 p指针每次移动一个字节,循环结束后,p指向s的最后一位‘\0’的地址,为47824820,所以(p-s)此时为47824820 - 47824812 = 8。即字符串的长度
发表于 2023-08-09 12:00:36 回复(0)

字符串的末尾为'\0',当循环到感叹号后面的一位时,结束循环。结果为字符串的长度。

发表于 2020-05-26 09:54:40 回复(0)
请问为什么unicode和多字节结果相同,而且两个指针想减不是地址的距离么,为什么成了统计字符数呢?
发表于 2019-12-28 12:39:27 回复(0)
字符串长度,注意最后有个加加
发表于 2019-03-11 10:34:20 回复(0)
不要忘记字符串最后的\0
发表于 2019-02-20 21:36:57 回复(0)
本题主要考查了函数定义及调用,以及while循环语句,执行fun函数后,首先是找到最后一个字符的地址,然后减去第一个地址得到的就是这个字符串的长度,所以本题答案为8。
发表于 2018-10-12 15:33:58 回复(0)
没看见叹号。。。
发表于 2018-03-09 10:46:53 回复(0)
直接统计字符串中的字符数
发表于 2018-03-08 19:12:53 回复(0)
忘记看了个“!”号
发表于 2017-08-27 09:10:25 回复(0)
实则统计字符串的长度strlen
发表于 2017-07-22 21:49:09 回复(0)
没看见那个感叹号。。。

发表于 2017-07-18 16:21:38 回复(0)
下面的e!直接忽略了。。
发表于 2017-06-17 00:45:15 回复(0)