【问题标题】:how to read values from a structure in C如何从C中的结构中读取值
【发布时间】:2013-05-08 09:16:17
【问题描述】:
#include<stdio.h>
#define msize 4096

struct memory
{
    int a[msize];
};

void main()
{
    struct memory m;
    m.a[0]=250; // temperature value of 25,0
    m.a[4]=01; // heater status OFF
    m.a[8]=240; // temperature value of 24,0
    m.a[12]=00; // heater status ON
    m.a[16]=220; // temperature value of 22,0
    m.a[20]=00; // heater status ON
    read(&m);

}

void read(struct memory m)
{
    int i;
    for(i=0;i<sizeof(msize);i++)
    {
        scanf("%d", m.a[i]);
    }
}

我的代码创建了一个大小为 4096 字节的结构,该结构的一个对象,然后将值分配给 i。

编译时,编译器在read 函数中抛出“第一次定义在这里”错误。

另外,有人可以帮我把这个读取值转换成 ASCII 码吗?

【问题讨论】:

  • 当出现错误时,您应该在问题中显示 - 编译器正在尝试提供帮助。
  • sizeof(msize) != 4096 and sizeof(struct memory) != 4096 and void read(struct memory *m) //读取arg指针

标签: c embedded hardware embedding


【解决方案1】:

你需要传递scanf一个地址来写所以需要改变

scanf("%d", m.a[i]);

scanf("%d", &m.a[i]);
//          ^

您还应该考虑将指向m 的指针传递给read,而不是按值传递这个庞大的结构

void read(struct memory* m)
{
    int i;
    for(i=0;i<msize;i++)
    {
        scanf("%d", &m->a[i]);
    }
}

(事实上,假设此更新,您在main 中的read(&amp;m) 调用似乎已经存在。)

【讨论】:

  • 我按照上面的方法进行了更改,然后它在 void read() 中抛出了一个错误,作为 read 的多个定义并首先在此处定义。
  • 您需要将read 移动到main 上方,或者在main 上方提供前向声明。有关详细信息,请参阅 sje397 的答案。
【解决方案2】:

除了@simonc 所说的,您还应该在顶部声明该函数:

#include<stdio.h>
#define msize 4096

struct memory
{
int a[msize];
};

void read(struct memory m);

void main()
{
//...

【讨论】:

  • 我按照您所说的进行了更改,然后它也抛出了一个错误作为读取的多个定义,并首先在 void read function() 中定义。
  • 如果您粘贴错误的确切文本会很有帮助。尝试更改您的函数名称 - read 很常见。
【解决方案3】:
#include<stdio.h>
#define msize 4096
struct memory
{
int a[msize];
};

void read(struct memory *m)
{
int i;
for(i=0;i<sizeof(msize);i++)
 {
    scanf("%d",&m->a[i]);
 }
}

int main()
{
struct memory m;
m.a[0]=250; // temperature value of 25,0
m.a[4]=01; // heater status OFF
m.a[8]=240; // temperature value of 24,0
m.a[12]=00; // heater status ON
m.a[16]=220; // temperature value of 22,0
m.a[20]=00; // heater status ON
read(&m);
return 0;
}

【讨论】:

  • 1. main 的返回类型不能为 void 2. read 应该放在 main 3 之前。因为@simonic 已经说过 use scanf("%d", &m->a[i]) 它会编译得很好,没有任何错误
  • 非常感谢!!!您能给我一些将这些值转换为 ASCII 的想法吗??
猜你喜欢
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 2017-12-15
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
相关资源
最近更新 更多