课外题遇到的一个问题
#include <stdio.h>int main()
{
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;
}
第五行 char name中的 有什么作用,为什么没有这个就不能正常运行,[]里面的数字是什么意思_(:з」∠) 完了,你这编程是怎么学的?
数组的概念还不清楚???? 本帖最后由 jackz007 于 2019-11-10 18:18 编辑
int i , j, k ;
char name ;
如果这样声明变量,那么,编译程序会为 i ,j ,k 各分配 4 个字节内存空间,用于保存变量的内容,因为每个 int 型变量占用 4 个字节;会为 name 分配 256 个字节单元,供 name 使用,因为 1 个 ASCII 字符占用 1 个字节,这样,name 中总共可以容纳 256 个字符,但是,扣除字符串末尾的结束标志 '\0',name 最多能够有效储存 255 个字符,就是说,name 所能保存的字符串的最大长度不能超过 255。 定义数组长度 jackz007 发表于 2019-11-10 18:16
如果这样声明变量,那么,编译程序会为 i ,j ,k 各分配 4 个字节内存空间,用于保存变量的内容 ...
你好,我把改成为什么还可以正常运行 本帖最后由 jackz007 于 2019-11-10 22:06 编辑
zhao_lh 发表于 2019-11-10 21:44
你好,我把改成为什么还可以正常运行
char name
如果这样定义 name,那么,编译程序不会为 name 分配空间,如果向 name 中储存字符串,那么,就会侵占其他变量占用的空间,导致占用相关内存的其他变量数值或内容发生非预期的改变,如果这些变量赋值,又会反过来破坏 name 的内容,因为这些内存本来就是编译程序为这些变量分配的合法空间。
只要运行一下下面的代码,就可以看到字符串变量 b 是如何袭夺字符串变量 a 的空间的。
#include <stdio.h>
#include <string.h>
int main(void)
{
char a , b ;
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> jackz007 发表于 2019-11-10 21:59
如果这样定义 name,那么,编译程序不会为 name 分配空间,如果向 name 中储存字符串,那么 ...
虽然我运行结果是两个hello word,但是明白你的意思了,谢谢啦。{:5_106:} zhao_lh 发表于 2019-11-11 17:34
虽然我运行结果是两个hello word,但是明白你的意思了,谢谢啦。
如果你那里是两个 "hello,world" ,那就是编译器有区别,把这一句:
char a , b ;
改成这样再试试:
char a , b ;
jackz007 发表于 2019-11-11 18:19
如果你那里是两个 "hello,world" ,那就是编译器有区别,把这一句:
改成这样再试试 ...
还是不行哦,我用的是Dev-c++ zhao_lh 发表于 2019-11-11 22:03
还是不行哦,我用的是Dev-c++
是啊,DEV C++ 用的是 TDM GCC ,和我使用的是完全一样的编译器呀,没有道理。改过以后还是显示 2 个相同的 "hello , world!" ? 对。小甲鱼C语言的视频里面是有装虚拟机的,我没有装,会不会是这个原因 jackz007 发表于 2019-11-11 22:07
是啊,DEV C++ 用的是 TDM GCC ,和我使用的是完全一样的编译器呀,没有道理。改过以后还是显示 ...
对。小甲鱼C语言的视频里面是有装虚拟机的,我没有装,会不会是这个原因 zhao_lh 发表于 2019-11-12 17:22
对。小甲鱼C语言的视频里面是有装虚拟机的,我没有装,会不会是这个原因
虚拟机只是提供一个 Linux 的系统环境,以便使用 GNU 的 C / C++ 编译器,和这个问题无关。
页:
[1]