A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© S捭K阖Y 中级黑马   /  2014-5-24 21:10  /  1773 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

char a[]={0};
scanf("%d",a);
int b = sizeof(a);
printf(“%d,%s”,b,a);
运行输入 asdfgh
输出  1 ,asdfgh
请问这是什么原因

7 个回复

正序浏览
sizeof 的返回值是字符数组a的数组长度 你把a初始化为 {0}  编译器就默认数组的长度为1  因为 字符数组到/0终止。
回复 使用道具 举报
奇迹 中级黑马 2014-5-26 09:45:11
7#
正常的输出啊。没错
回复 使用道具 举报
本帖最后由 无尽可能 于 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. }
复制代码
回复 使用道具 举报
wanzhu159 发表于 2014-5-25 23:13
不是,0是个元素,一个字符。

好的,谢谢
回复 使用道具 举报
S捭K阖Y 发表于 2014-5-25 22:30
那个0不是代表初始化为空吗?

不是,0是个元素,一个字符。
回复 使用道具 举报
wanzhu159 发表于 2014-5-24 21:52
首先你的char a[]={0};已经决定你的字符数组a里面只能有一个元素,接下来你输入asdfgn,但你scanf方法是让输 ...

那个0不是代表初始化为空吗?
回复 使用道具 举报
首先你的char a[]={0};已经决定你的字符数组a里面只能有一个元素,接下来你输入asdfgn,但你scanf方法是让输入的东西形式是十进制有符号整数存放到数组a也就是0的位置,0是会被看做是用单引号括起来,其实就是一个整形数,一个整形数可以存放多个字符,一般为8个字符。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马