鱼C论坛

 找回密码
 立即注册
查看: 2590|回复: 16

[已解决]char man[];

[复制链接]
发表于 2021-5-12 17:21:50 | 显示全部楼层 |阅读模式
3鱼币
现在我脑子里的问题:假如char man[];里面我就算是放1,运行后,也可以随便输数组,不限制大小那种.

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

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

希望有个大佬给我讲解一下 很懵的状态...
最佳答案
2021-5-12 17:21:51
单纯的char man[]是不可以的,中括号里不指定空间的,也就是初始化时可以用比如char man[]="aaas"这样的
而中括号里填数,填多大的数就是申请多大的空间,这是申请静态空间,后面你还会遇到申请动态空间的

char man[];

char man[];

最佳答案

查看完整内容

单纯的char man[]是不可以的,中括号里不指定空间的,也就是初始化时可以用比如char man[]="aaas"这样的 而中括号里填数,填多大的数就是申请多大的空间,这是申请静态空间,后面你还会遇到申请动态空间的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-12 17:21:51 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
单纯的char man[]是不可以的,中括号里不指定空间的,也就是初始化时可以用比如char man[]="aaas"这样的
而中括号里填数,填多大的数就是申请多大的空间,这是申请静态空间,后面你还会遇到申请动态空间的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

小甲鱼那个列题里面为何上来就给个256空间呀?我在里面给一个字符空间,他也可以输入名字呀S1E8:字符和字符串 | 课后测试题及答案 --最后一个大题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

你的问题我们看了,似懂非懂
简单来说就是,看不懂你的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我在里面给一个字符空间,他也可以输入名字呀
把你说可以的这个代码贴出来看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

首先,一个字节用来存储名字,肯定是不够
其次,这个256是需要自己测算的,假设不考虑少数民族和外国人,那么名字也就是4个汉字就够用了,那么我们申请9个字节的空间就可以了,当然了,现在计算机内存都大,所以你别说申请256就是申请10000也无所谓了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-12 18:47:26 | 显示全部楼层
人造人 发表于 2021-5-12 18:22
我在里面给一个字符空间,他也可以输入名字呀
把你说可以的这个代码贴出来看看
#include <stdio.h>

int main()
{
        char name[1];//很懵逼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;
}
   请试一下 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


                               
登录/注册后可看大图


是因为编译器的原因吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


                               
登录/注册后可看大图



就这个很懵逼  会不会是编译器的原因?(麻烦你了,谢谢!)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-12 19:05:04 From FishC Mobile | 显示全部楼层
小罗的白弟弟 发表于 2021-5-12 18:53
就这个很懵逼  会不会是编译器的原因?(麻烦你了,谢谢!)

这个可能是后面的内存没人接管,又恰好处于可写的状态,所以不会报错,但是这是一个概率问题,假设你要做一个大的项目,你会去堵这个概率吗,所以一定要申请一个足够大的空间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-12 19:05:07 | 显示全部楼层

数组越界访问,这个代码在其他运行环境上,很有可能会出问题
$ ./main
请输入您的姓名:abcd
请输入您的身高(cm):1
请输入您的体重(kg):1
========== 正在为您转换 ==========
@����的身高是0.39(in) , 体重是2.21(lb)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-12 19:05:47 | 显示全部楼层
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

茅塞顿开,谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-12 19:09:23 | 显示全部楼层

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

这个可能是后面的内存没人接管,又恰好处于可写的状态,所以不会报错,但是这是一个概率问题,假设你要做一个大的项目,你会去堵这个概率吗,所以一定要申请一个足够大的空间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-12 19:17:35 | 显示全部楼层
小罗的白弟弟 发表于 2021-5-12 19:09
编译器或者和这个大佬说的差不多吧?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-12 19:25:03 | 显示全部楼层

&#127383;  非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-13 18:45:49 | 显示全部楼层

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 08:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表