黑马程序员技术交流社区

标题: 关于sizeof()的一个问题 [打印本页]

作者: S捭K阖Y    时间: 2014-5-24 21:10
标题: 关于sizeof()的一个问题
char a[]={0};
scanf("%d",a);
int b = sizeof(a);
printf(“%d,%s”,b,a);
运行输入 asdfgh
输出  1 ,asdfgh
请问这是什么原因
作者: wanzhu159    时间: 2014-5-24 21:52
首先你的char a[]={0};已经决定你的字符数组a里面只能有一个元素,接下来你输入asdfgn,但你scanf方法是让输入的东西形式是十进制有符号整数存放到数组a也就是0的位置,0是会被看做是用单引号括起来,其实就是一个整形数,一个整形数可以存放多个字符,一般为8个字符。
作者: S捭K阖Y    时间: 2014-5-25 22:30
wanzhu159 发表于 2014-5-24 21:52
首先你的char a[]={0};已经决定你的字符数组a里面只能有一个元素,接下来你输入asdfgn,但你scanf方法是让输 ...

那个0不是代表初始化为空吗?
作者: wanzhu159    时间: 2014-5-25 23:13
S捭K阖Y 发表于 2014-5-25 22:30
那个0不是代表初始化为空吗?

不是,0是个元素,一个字符。
作者: S捭K阖Y    时间: 2014-5-25 23:44
wanzhu159 发表于 2014-5-25 23:13
不是,0是个元素,一个字符。

好的,谢谢
作者: 无尽可能    时间: 2014-5-26 01:20
本帖最后由 无尽可能 于 2014-5-26 01:31 编辑

不知道你用的是什么编译器,我xcode试过了,第7行如果按%d编译是有警告的,如果还按这种输入只能输入0~127数字才可以有正确输出,如果输入如asdfgh这样的英文是输出不了任何东西的。
  1. #include <stdio.h>
  2. int main()
  3. {

  4.    
  5.     char a[]={0}; //定义了一个字符串数组,但只有一个字符,这个字符对应的ascll码值为0,
  6.     scanf("%d",a);//以整形方式存放a的输入的字符。这里输入97
  7.     int b = sizeof(a);/数组的长度都为1
  8.     printf("%d,%s\n", b, a); // b=1,a以字符串形式输出,a的输出为a(ascll码是97)
  9.     return 0;
  10. }
复制代码

作者: 奇迹    时间: 2014-5-26 09:45
正常的输出啊。没错
作者: 夏沫的黄昏′    时间: 2014-5-26 22:41
sizeof 的返回值是字符数组a的数组长度 你把a初始化为 {0}  编译器就默认数组的长度为1  因为 字符数组到/0终止。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2