C 使用指针读取结构值
我有一个包含浮点变量的结构。我试图使用指向结构的指针读取该值。代码如下:C 使用指针读取结构值,c,C,我有一个包含浮点变量的结构。我试图使用指向结构的指针读取该值。代码如下: struct mas { float m; }; int main(void) { struct mas *ms; ms=(struct mas*)malloc(sizeof(struct mas)); scanf("%f",&(ms->m)); printf("%f",ms->m); return 0; } 但运行该程序会产生以下错误: scanf
struct mas {
float m;
};
int main(void)
{
struct mas *ms;
ms=(struct mas*)malloc(sizeof(struct mas));
scanf("%f",&(ms->m));
printf("%f",ms->m);
return 0;
}
但运行该程序会产生以下错误:
scanf floating point formats not linked
编译程序使用的是Borland Turbo C++(3),Windows PC. Why是这样的吗?< /P> < P>这可能是有用的:
从文章中: Borland的编译器尽量做到聪明而不是盲目 在浮点(f-p)库中链接,除非您需要它。唉,他们 所有人都错了决定。。。(强制他们链接)在源文件中的某个位置定义此函数,但不要 叫它: 此外:如果有Borland C++ 3,自述文件的文档略少 丑陋的工作。在程序中插入以下语句:
我能够在GCC 4.2.1下编译和运行此代码:
#include <stdlib.h>
#include <stdio.h>
struct mas{
float m;
};
int main()
{
struct mas *ms;
ms=malloc(sizeof(struct mas));
scanf("%f",&(ms->m));
printf("%f\n",ms->m);
return 0;
}
#包括
#包括
结构mas{
浮动m;
};
int main()
{
结构mas*ms;
ms=malloc(sizeof(struct mas));
扫描频率(“%f”和(ms->m));
printf(“%f\n”,ms->m);
返回0;
}
您是否缺少任何#include
语句?我认为您不需要从malloc()
强制转换结果
为什么会这样
因为在你的古老无用的编译器中。升级到能够正确处理浮点操作的较新版本
最新版本的是一个不错的选择,或者你可以免费下载微软的软件包,该软件包将他们的编译器与世界级的IDE捆绑在一起。没有必要也不建议放弃
malloc
的返回值。我想你最好使用更现代的编译器(TC++3已经有20年历史了)如Visual Studio Express。请查看此StackOverflow问题的答案:不这样做会产生编译器警告“不可移植指针转换”@DavidGrayson:这就是“复制关闭”功能的用途。在旧MS-DOS时代,640KB内存限制有所不同,但现在…解释得很好,建议不错。
extern unsigned _floatconvert;
#pragma extref _floatconvert
#include <stdlib.h>
#include <stdio.h>
struct mas{
float m;
};
int main()
{
struct mas *ms;
ms=malloc(sizeof(struct mas));
scanf("%f",&(ms->m));
printf("%f\n",ms->m);
return 0;
}