小罗的白弟弟 发表于 2021-5-12 17:21:50

char man[];

现在我脑子里的问题:假如char man[];里面我就算是放1,运行后,也可以随便输数组,不限制大小那种.

知识点:"char a; //这是一个常规的字符变量 他能存放1个字符
            char name; // 这是一个字符数组,他能存放256个字符"

这个理解 但是我[]里面放1,一个字符我也不能无限输入吧{:9_234:}

希望有个大佬给我讲解一下 很懵的状态...{:10_266:}

wp231957 发表于 2021-5-12 17:21:51

单纯的char man[]是不可以的,中括号里不指定空间的,也就是初始化时可以用比如char man[]="aaas"这样的
而中括号里填数,填多大的数就是申请多大的空间,这是申请静态空间,后面你还会遇到申请动态空间的

小罗的白弟弟 发表于 2021-5-12 18:04:45

wp231957 发表于 2021-5-12 17:56
单纯的char man[]是不可以的,中括号里不指定空间的,也就是初始化时可以用比如char man[]="aaas"这样的
...

小甲鱼那个列题里面为何上来就给个256空间呀?我在里面给一个字符空间,他也可以输入名字呀{:10_266:}S1E8:字符和字符串 | 课后测试题及答案 --最后一个大题

人造人 发表于 2021-5-12 18:21:59

小罗的白弟弟 发表于 2021-5-12 18:04
小甲鱼那个列题里面为何上来就给个256空间呀?我在里面给一个字符空间,他也可以输入名字呀S1E ...

你的问题我们看了,似懂非懂
简单来说就是,看不懂你的问题

人造人 发表于 2021-5-12 18:22:55

小罗的白弟弟 发表于 2021-5-12 18:04
小甲鱼那个列题里面为何上来就给个256空间呀?我在里面给一个字符空间,他也可以输入名字呀S1E ...

我在里面给一个字符空间,他也可以输入名字呀
把你说可以的这个代码贴出来看看

wp231957 发表于 2021-5-12 18:33:44

小罗的白弟弟 发表于 2021-5-12 18:04
小甲鱼那个列题里面为何上来就给个256空间呀?我在里面给一个字符空间,他也可以输入名字呀S1E ...

首先,一个字节用来存储名字,肯定是不够
其次,这个256是需要自己测算的,假设不考虑少数民族和外国人,那么名字也就是4个汉字就够用了,那么我们申请9个字节的空间就可以了,当然了,现在计算机内存都大,所以你别说申请256就是申请10000也无所谓了

小罗的白弟弟 发表于 2021-5-12 18:47:26

人造人 发表于 2021-5-12 18:22
我在里面给一个字符空间,他也可以输入名字呀
把你说可以的这个代码贴出来看看

#include <stdio.h>

int main()
{
        char name;//很懵逼char name[] 里面数字
        float height, weight;
       
        printf("请输入您的姓名:");
        scanf("%s" , &name);
       
        printf("请输入您的身高(cm):");
        scanf("%f" , &height);
       
        printf("请输入您的体重(kg):");
        scanf("%f" , &weight);
       
        printf("========== 正在为您转换 ==========\n");
       
        height = height / 2.54;
        weight = weight / 0.453;
       
        printf("%s的身高是%.2f(in) , 体重是%.2f(lb)。\n", name , height , weight);
        return 0;
}   请试一下 谢谢{:10_245:}

小罗的白弟弟 发表于 2021-5-12 18:52:23

人造人 发表于 2021-5-12 18:22
我在里面给一个字符空间,他也可以输入名字呀
把你说可以的这个代码贴出来看看

https://z3.ax1x.com/2021/05/12/gwO23d.png

是因为编译器的原因吗?

小罗的白弟弟 发表于 2021-5-12 18:53:14

wp231957 发表于 2021-5-12 18:33
首先,一个字节用来存储名字,肯定是不够
其次,这个256是需要自己测算的,假设不考虑少数民族和外国人 ...

https://z3.ax1x.com/2021/05/12/gwO23d.png


就这个很懵逼会不会是编译器的原因?(麻烦你了,谢谢!)

wp231957 发表于 2021-5-12 19:05:04

小罗的白弟弟 发表于 2021-5-12 18:53
就这个很懵逼会不会是编译器的原因?(麻烦你了,谢谢!)

这个可能是后面的内存没人接管,又恰好处于可写的状态,所以不会报错,但是这是一个概率问题,假设你要做一个大的项目,你会去堵这个概率吗,所以一定要申请一个足够大的空间

人造人 发表于 2021-5-12 19:05:07

小罗的白弟弟 发表于 2021-5-12 18:47
请试一下 谢谢

数组越界访问,这个代码在其他运行环境上,很有可能会出问题
$ ./main
请输入您的姓名:abcd
请输入您的身高(cm):1
请输入您的体重(kg):1
========== 正在为您转换 ==========
@����的身高是0.39(in) , 体重是2.21(lb)。

人造人 发表于 2021-5-12 19:05:47

小罗的白弟弟 发表于 2021-5-12 19:07:24

wp231957 发表于 2021-5-12 19:05
这个可能是后面的内存没人接管,又恰好处于可写的状态,所以不会报错,但是这是一个概率问题,假设你要做 ...

茅塞顿开,谢谢大佬{:10_256:}

小罗的白弟弟 发表于 2021-5-12 19:09:23

人造人 发表于 2021-5-12 19:05


编译器或者和这个大佬说的差不多吧?

这个可能是后面的内存没人接管,又恰好处于可写的状态,所以不会报错,但是这是一个概率问题,假设你要做一个大的项目,你会去堵这个概率吗,所以一定要申请一个足够大的空间

人造人 发表于 2021-5-12 19:17:35

小罗的白弟弟 发表于 2021-5-12 19:09
编译器或者和这个大佬说的差不多吧?

小罗的白弟弟 发表于 2021-5-12 19:25:03

人造人 发表于 2021-5-12 19:17


&#127383;非常感谢{:9_228:}

小甲鱼 发表于 2021-5-13 18:45:49

小罗的白弟弟 发表于 2021-5-12 19:25
&#127383;非常感谢

char name; 这个256是一个预测的数字,因为C语言比较笨,它不会检测边界,所以这里尽可能给它一个合适的尺寸(太大浪费空间,太小容易造成溢出越界)。

虽然 char name 没问题,但是如果输入超过 1 个字符,其实就已经是发生越界了,这在一些操作系统中是不被允许的,极有可能引发错误。就相当于咱客货车超载,虽然也能开,但你别遇上交警……

页: [1]
查看完整版本: char man[];