首页 > 试题广场 >

下面程序段的运行结果是?

[单选题]
下面程序段的运行结果是()
#include <stdio.h>

int main(int argc, char *argv[]) {
    char *s = "abcdefg";
    s += 2;
    printf("%d\n", s);
    return 0;
}


  • cde
  • 字符"c"
  • 字符"c"的地址
  • 不确定
推荐
答案:C

指针s指向的是字符串的首地址,也就是字符‘a’的地址
s+=2使得s指向字符‘c’
printf函数中使用%d做控制,要输出的是整型数字,也就是字符‘c’的地址

如果要输出字符‘c’,可用
fprintf(stderr, "%c\n", *s);
如果要输出剩余字符串,可用
fprintf(stderr, "%s\n", s);

编辑于 2015-01-22 14:35:08 回复(3)
指针s指向的是字符串的首地址,也就是字符‘a’的地址
s+=2使得s指向字符‘c’
printf函数中使用%d做控制,要输出的是整型数字,也就是字符‘c’的地址

如果要输出字符‘c’,可用

fprintf(stderr, "%c\n", *s);
如果要输出剩余字符串,可用

fprintf(stderr, "%s\n", s);
fprintf的第一个参数指的是文件描述符,stderr的文件描述符是2,标准输入是0,标准输出是1,它们可以看做是特殊的文件。
编辑于 2017-08-03 10:50:58 回复(0)
stdout -- 标准输出设备 (printf("..")) 同 stdout。
stderr -- 标准错误输出设备搜索
两者默认向屏幕输出。
但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。

发表于 2015-08-21 21:20:35 回复(0)
stdout输出到磁盘文件,stderr在屏幕。
发表于 2020-04-23 21:56:07 回复(0)
#include <stdio.h>
main()
{
    char *s="abcdefg";
    s+=2;
    printf("%p\n",s)//输出字符c的地址
    printf("%s\n",s)//输出字符串:clefg
}
被定义的指向字符类型的指针s, 指向的是字符串的首地址,首地址的表识是以char为单位的,也就是说,指向的是第一个字符的地址;
s+=2;指针指向第三个字符的地址
发表于 2018-04-17 10:41:59 回复(0)
为什么不是字符c的ASCII
发表于 2021-04-03 13:27:35 回复(1)
做个笔记,复制的: 答案:C 指针s指向的是字符串的首地址,也就是字符‘a’的地址 s+=2使得s指向字符‘c’ printf函数中使用%d做控制,要输出的是整型数字,也就是字符‘c’的地址 如果要输出字符‘c’,可用 fprintf(stderr, "%c\n", *s);如果要输出剩余字符串,可用 fprintf(stderr, "%s\n", s);
发表于 2019-01-10 14:47:57 回复(0)
对,粗心了,没看清楚最后问的啥,输出的肯定是一个地址,而不是其中存的字符值
发表于 2017-06-13 08:10:12 回复(0)
在这是我想多了,我以为指针是指向字符串整体,+2会偏移到未知地址,大家注意一下二维数组中+n的区别就好了。
发表于 2016-02-24 03:08:09 回复(2)
答案 C
解释:
char *s = "abcdefg";   
  s += 2;     //s的首地址向后便宜2位
fprintf(stderr, "%d\n", s);//打印字符c的地址的十进制形式。

发表于 2015-01-21 16:48:46 回复(0)
指针加减移动的的指针所指类型的大小
发表于 2024-08-14 20:39:27 回复(0)
%p是输出16进制,%d 是10进制,%o是8进制
发表于 2022-03-17 20:29:23 回复(0)
jzx头像 jzx
这里是d%,所以输出的得是一个整数,所以就得是c的地址
发表于 2021-03-19 20:32:28 回复(0)
感觉编译不通过把
发表于 2020-09-05 19:52:01 回复(0)
看错了
发表于 2020-06-20 17:41:25 回复(0)
stdout -- 标准输出设备 (printf("..")) 同 stdout。 stderr -- 标准错误输出设备搜索 两者默认向屏幕输出。 但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。
发表于 2018-01-16 12:24:47 回复(0)
注意s 和*s的区别
发表于 2017-09-22 11:11:55 回复(0)
输出指向”cdefg"字符串指针的地址,也就是‘c’的地址
发表于 2017-08-15 19:50:31 回复(0)
指针s指向的是字符串的首地址,也就是字符‘a’的地址,s+=2就是向后移动两个,代码敲出来的地址如下
#include <stdio.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
    char *s = "abcdefg";
    fprintf(stderr,"%d\n",s);
    printf("%c=%d\n",s[0],s);
    s += 2;
    fprintf(stderr,"%d\n",s);
    printf("%c=%d\n",s[0],s);
    return 0;
}
运行结果:
4196072
a=4196072
4196074
c=4196074

发表于 2015-10-27 15:09:29 回复(0)
为什么是fprintf(stderr,"%d\n",s); 而不是fprintf(stdout,"%d\n",s);
虽然答案都是c

发表于 2015-08-05 21:24:50 回复(0)
是不是应该是sprintf 而不是fprintf
发表于 2015-07-13 12:02:00 回复(0)