鱼C论坛

 找回密码
 立即注册
查看: 1559|回复: 13

[已解决]课外题遇到的一个问题

[复制链接]
发表于 2019-11-10 17:23:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

int main()
{
        char name[256];
        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;
}



第五行   char name[256]  中的 [256] 有什么作用,为什么没有这个就不能正常运行,[  ]里面的数字是什么意思_(:з」∠)
最佳答案
2019-11-10 18:16:12
本帖最后由 jackz007 于 2019-11-10 18:18 编辑
        int i , j  , k     ;
        char name[256] ;
        如果这样声明变量,那么,编译程序会为 i ,j ,k 各分配 4 个字节内存空间,用于保存变量的内容,因为每个 int 型变量占用 4 个字节;会为 name 分配 256 个字节单元,供 name 使用,因为 1 个 ASCII 字符占用 1 个字节,这样,name 中总共可以容纳 256 个字符,但是,扣除字符串末尾的结束标志 '\0',name 最多能够有效储存 255 个字符,就是说,name 所能保存的字符串的最大长度不能超过 255。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-10 17:56:36 | 显示全部楼层
完了,你这编程是怎么学的?
数组的概念还不清楚????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-10 18:16:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-11-10 18:18 编辑
        int i , j  , k     ;
        char name[256] ;
        如果这样声明变量,那么,编译程序会为 i ,j ,k 各分配 4 个字节内存空间,用于保存变量的内容,因为每个 int 型变量占用 4 个字节;会为 name 分配 256 个字节单元,供 name 使用,因为 1 个 ASCII 字符占用 1 个字节,这样,name 中总共可以容纳 256 个字符,但是,扣除字符串末尾的结束标志 '\0',name 最多能够有效储存 255 个字符,就是说,name 所能保存的字符串的最大长度不能超过 255。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-11-10 20:57:18 | 显示全部楼层
定义数组长度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-10 21:44:01 | 显示全部楼层
jackz007 发表于 2019-11-10 18:16
如果这样声明变量,那么,编译程序会为 i ,j ,k 各分配 4 个字节内存空间,用于保存变量的内容 ...

你好,我把[256]改成[0]为什么还可以正常运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-10 21:59:23 | 显示全部楼层
本帖最后由 jackz007 于 2019-11-10 22:06 编辑
zhao_lh 发表于 2019-11-10 21:44
你好,我把[256]改成[0]为什么还可以正常运行

        char name[0]
        如果这样定义 name,那么,编译程序不会为 name 分配空间,如果向 name 中储存字符串,那么,就会侵占其他变量占用的空间,导致占用相关内存的其他变量数值或内容发生非预期的改变,如果这些变量赋值,又会反过来破坏 name 的内容,因为这些内存本来就是编译程序为这些变量分配的合法空间。

         只要运行一下下面的代码,就可以看到字符串变量 b 是如何袭夺字符串变量 a 的空间的。
#include <stdio.h>
#include <string.h>

int main(void)
{
        char a[256] , b[0]            ;
        strcpy(a , "Hello , world !") ;
        printf("%s\n" , a)            ; // 正常显示 "Hello , world !\n"
        strcpy(b , "I love fishC !")  ; // 表面上改变的是 b,实际上改变的是 a
        printf("%s\n" , a)            ; // 显示的并不是 "Hello , world !\n",而是 "I love fishC !\n"
}
        下面是编译、运行实况
C:\Bin>g++ -o x x.c

C:\Bin>x
hello , world !
I love fishC !

C:\Bin>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-11-11 17:34:08 | 显示全部楼层
jackz007 发表于 2019-11-10 21:59
如果这样定义 name,那么,编译程序不会为 name 分配空间,如果向 name 中储存字符串,那么 ...

虽然我运行结果是两个hello word,但是明白你的意思了,谢谢啦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-11 18:19:18 From FishC Mobile | 显示全部楼层
zhao_lh 发表于 2019-11-11 17:34
虽然我运行结果是两个hello word,但是明白你的意思了,谢谢啦。

       如果你那里是两个 "hello,world" ,那就是编译器有区别,把这一句:
        char a[256] , b[0] ;
        改成这样再试试:
        char a[0] , b[256] ;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-11 22:03:17 | 显示全部楼层
jackz007 发表于 2019-11-11 18:19
如果你那里是两个 "hello,world" ,那就是编译器有区别,把这一句:

        改成这样再试试 ...

还是不行哦,我用的是Dev-c++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-11 22:07:40 | 显示全部楼层
zhao_lh 发表于 2019-11-11 22:03
还是不行哦,我用的是Dev-c++


       是啊,DEV C++ 用的是 TDM GCC ,和我使用的是完全一样的编译器呀,没有道理。改过以后还是显示 2 个相同的 "hello , world!" ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-12 17:22:11 From FishC Mobile | 显示全部楼层
对。小甲鱼C语言的视频里面是有装虚拟机的,我没有装,会不会是这个原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-12 17:22:48 From FishC Mobile | 显示全部楼层
jackz007 发表于 2019-11-11 22:07
是啊,DEV C++ 用的是 TDM GCC ,和我使用的是完全一样的编译器呀,没有道理。改过以后还是显示 ...

对。小甲鱼C语言的视频里面是有装虚拟机的,我没有装,会不会是这个原因
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-12 18:23:37 | 显示全部楼层
zhao_lh 发表于 2019-11-12 17:22
对。小甲鱼C语言的视频里面是有装虚拟机的,我没有装,会不会是这个原因


       虚拟机只是提供一个 Linux 的系统环境,以便使用 GNU 的 C / C++ 编译器,和这个问题无关。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 13:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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