肚子饿了233 发表于 2020-12-31 16:30:48

(更新)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:37:21

本帖最后由 一世轻尘 于 2020-12-31 16:50 编辑

a是占用一个char大小对象的地址,a是一个占用两个char大小对象的地址,由于这个数和内含两个数的数组都开始于同一个地址,所以a和a【0】的值相同,a指的是该数组首元素(a)的地址,%s,是输出字符串,碰到’\0'才会停止

肚子饿了233 发表于 2020-12-31 16:50:02

一世轻尘 发表于 2020-12-31 16:37
a指的是该数组首元素(a)的地址,%s,是输出字符串,碰到’\0'才会停止

为啥改为%c就不行了呢?

一世轻尘 发表于 2020-12-31 16:54:31

肚子饿了233 发表于 2020-12-31 16:50
为啥改为%c就不行了呢?

a本身是一个内含两个char型的数组,用%c只能输出单个字符,至于为啥它一个也不输出那我就不清楚了

笨鸟学飞 发表于 2020-12-31 17:00:34

1、为啥输出的结果为abcd呢?
你这数组定义方式有误,所以存在了越界情况。。。
按你的意思应该是char a={{'a','b'},{'c','d'},{'e','f'}};
2、a表示的应该是二维数组的第一行呀,应该输出ab呀?
还是和问题1一样,如果你定义对了,就没错了。
3、为啥改为%c编译器就啥也输不出来呢?
你也知道a并不是单个字符,%c只能输出单个字符,因此你用%c 输出多个字符怎么不报错?

肚子饿了233 发表于 2020-12-31 17:06:37

笨鸟学飞 发表于 2020-12-31 17:00
1、为啥输出的结果为abcd呢?
你这数组定义方式有误,所以存在了越界情况。。。
按你的意思应该是char a[ ...

定义方式好像没错

小噗噗啊 发表于 2020-12-31 17:20:30


#include<stdio.h>
main()
{
      char a={'a','b','c','d','e','f'};
      a='\0';
      printf("%s",a);
}

jackz007 发表于 2020-12-31 17:38:42

本帖最后由 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" 了。

te___amo 发表于 2020-12-31 23:08:31

a是定位到 字符e 啊没毛病的e改成了\0   %s遇到\0 就停止读取了   所以是abcd

luoge123 发表于 2020-12-31 23:41:26

a=a ,a=b,    a=c,    a=d,   a=e,    a=f;当a='\0'时,字符串结束输出,所以结果为abcd

无凉之心 发表于 2021-1-2 22:56:17

输出a【0】,系统会认为你要输出的是字符串,所以改成%c就不行,而输出字符串不会在那行就停,只有遇到\0才会停,原本是应该在数组的末尾接受到的\0,由于a【2】【0】有定义了,所以提前停止。
页: [1]
查看完整版本: (更新)C语言!