【问题标题】:c, problems with using structc、使用struct的问题
【发布时间】:2009-05-01 18:57:24
【问题描述】:

我正在尝试编写一个从外部文件(字符串字符串 int,每行)读取文本的程序。 struct 是在 main 函数之外定义的:

typedef struct Person {
  char fname[15];
  char lname[20];
  unsigned long int birth;
} clovek;

我不需要“clovek”作为数组,因为每一行数据都可以被覆盖。 线为红色以缓冲:

fgets(buffer, 50, datafile);

然后我想将它解析为结构,但这就是我的问题出现的地方:

int i = 0;
while (buffer[i] != ' ') {
  clovek.fname[i] = buffer[i];
  i++;
}

这给了我一个错误:expected identifier or '(' before '.' token

我也想使用此代码进行调试,但它也给出了另一个错误:

printf("fname, %s\n", clovek.fname);

错误:'clovek' 之前的预期表达式

我的猜测是我完全误解了结构的使用。

【问题讨论】:

  • 除了一个你得到的答案之外,所有其他答案都提供了另​​一个令人恐惧的例子,说明人们是如何弄错非常基本的 C 语法的。
  • 让我添加另一个复杂性问题,即结构中的元素对齐。 Google 是您的朋友。
  • 更不用说等待发生的缓冲区溢出以及缺少使 struct Person 的成员作为 C 字符串无用的 nul 终止。

标签: c struct


【解决方案1】:

clovekstruct Person 的别名。要么删除typedef 关键字,要么在代码中的某处创建struct Person 类型的对象。使用当前代码,您可以:

clovek someone;

while (buffer[ i ] ) != ' ') {
    someone.fname[ i ] = buffer[ i ];
/* .. */

【讨论】:

    【解决方案2】:

    您的语句将 clovek 定义为结构 Person 的别名。

    从声明中删除“typedef”。这样,clovek 就变成了 Person 类型的变量:

    或者更好的是,将结构声明与变量声明分开:

    struct Person {
      char fname[15];
      char lname[20];
      unsigned long int birth;
    };
    
    struct Person clovek;
    

    【讨论】:

    • 你的意思可能是“struct Person clovek;”在第二行。
    • 应该是struct Person clovek;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2010-11-07
    • 2020-07-07
    相关资源
    最近更新 更多