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;
}