使用指针读取结构值

时间:2012-01-11 06:05:43

标签: c

我有一个包含float var的结构。我试图使用指向结构的指针读取值。这是代码:

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

在Windows PC上使用的编译器是Borland Turbo C ++(3.0)。为什么会这样?

3 个答案:

答案 0 :(得分:5)

这可能会有所帮助:http://www.faqs.org/faqs/msdos-programmer-faq/part2/section-5.html

来自文章:

  

Borland的编译器试图变得聪明而不是    除非您需要,否则链接在浮点(f-p)库中。唉,他们    所有人都认为错误。 ...(强制它们链接它)在源文件中的某处定义此函数但不这样做    叫它:

static void forcefloat(float *p)
{
  float f = *p;
  forcefloat(&f);
}

此外:

  

如果你有Borland C ++ 3.0,那么自述文件文件会略少一些    丑陋的解决方法。在程序中插入这些语句:

 extern unsigned _floatconvert;
 #pragma extref _floatconvert

答案 1 :(得分:3)

  

为什么会这样......

因为你古老无用的编译器中有a bug。升级到能够正确处理浮点运算的新版本。

最新版本的GCC是一个不错的选择,或者您可以免费下载Microsoft的Visual C++ Express软件包,它将其编译器与世界级的IDE捆绑在一起。

答案 2 :(得分:1)

我能够在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;
}

您是否遗漏了任何#include声明?我认为您不需要从malloc()投射结果。