(更新)C语言!
#include<stdio.h>main()
{
char a={'a','b','c','d','e','f'};
a='\0';
printf("%s",a);
}
请问各位,为啥输出的结果为abcd呢?a表示的应该是二维数组的第一行呀,应该输出ab呀?还有为啥改为%c编译器就啥也输不出来呢? 本帖最后由 一世轻尘 于 2020-12-31 16:50 编辑
a是占用一个char大小对象的地址,a是一个占用两个char大小对象的地址,由于这个数和内含两个数的数组都开始于同一个地址,所以a和a【0】的值相同,a指的是该数组首元素(a)的地址,%s,是输出字符串,碰到’\0'才会停止 一世轻尘 发表于 2020-12-31 16:37
a指的是该数组首元素(a)的地址,%s,是输出字符串,碰到’\0'才会停止
为啥改为%c就不行了呢? 肚子饿了233 发表于 2020-12-31 16:50
为啥改为%c就不行了呢?
a本身是一个内含两个char型的数组,用%c只能输出单个字符,至于为啥它一个也不输出那我就不清楚了 1、为啥输出的结果为abcd呢?
你这数组定义方式有误,所以存在了越界情况。。。
按你的意思应该是char a={{'a','b'},{'c','d'},{'e','f'}};
2、a表示的应该是二维数组的第一行呀,应该输出ab呀?
还是和问题1一样,如果你定义对了,就没错了。
3、为啥改为%c编译器就啥也输不出来呢?
你也知道a并不是单个字符,%c只能输出单个字符,因此你用%c 输出多个字符怎么不报错? 笨鸟学飞 发表于 2020-12-31 17:00
1、为啥输出的结果为abcd呢?
你这数组定义方式有误,所以存在了越界情况。。。
按你的意思应该是char a[ ...
定义方式好像没错
#include<stdio.h>
main()
{
char a={'a','b','c','d','e','f'};
a='\0';
printf("%s",a);
}
本帖最后由 jackz007 于 2020-12-31 17:40 编辑
char a={'a','b','c','d','e','f'};
执行下面的语句后
a='\0';
变成了
char a={'a','b','c','d','\0','f'};
尽管 a 应该只包括 2 个字符,'a' 和 'b',但是,在作为字符串显示的时候,printf() 函数会继续续显示 a 的后续字符,直到遇到第一个 '\0' 为止,于是,字符串 a 显示出来就是 "abcd" 了。 a是定位到 字符e 啊没毛病的e改成了\0 %s遇到\0 就停止读取了 所以是abcd a=a ,a=b, a=c, a=d, a=e, a=f;当a='\0'时,字符串结束输出,所以结果为abcd 输出a【0】,系统会认为你要输出的是字符串,所以改成%c就不行,而输出字符串不会在那行就停,只有遇到\0才会停,原本是应该在数组的末尾接受到的\0,由于a【2】【0】有定义了,所以提前停止。
页:
[1]