结构和功能

时间:2014-04-21 07:12:30

标签: c function struct

我已经宣布了这样的结构。

typedef struct fileProperties //the struct.
{
    char name[256]; /*File or directory name*/ 
    int mode;   /*protection and file type*/ 
    int userId; /*User ID of owner*/
    int groupId;    /*Group ID of owner*/
    int size;   /*file size in bytes*/
    char modifyTime[50];    /*modify time as a string*/
} FILES;

我想在这样的函数调用中写入file1的属性。

int createStruct()
{
    char structBuffer[251];
    printf("\n > Please enter a file name to create a struct for.> ");
    inputFix(structBuffer, STRUCT_SIZE);
    strncpy(file1.name, structBuffer, sizeof(structBuffer));
    printf(" > Created.");
    return 0;
}

inputFix位于:

void inputFix(char string[],int length)
{
    int ch, len = 0;
    fgets(string, length, stdin);
    string[strcspn(string, "\r\n")] = '\0';
    len = strlen(string);
    if (len == length - 1)
    {
        while((ch = getchar()) != '\n' && ch != EOF);
    }
}

STRUCT_SIZE定义为250的大小。

在我的代码顶部,我有这个陈述。

FILES file1;

我已经从编码单元和教程中读到了几个关于结构的教程。

我看不出为什么会收到错误:

functions.c:59:3: error: unknown type name ‘FILES’
functions.c:62:52: error: request for member ‘name’ in something not a structure or union

使用typedef不值得吗?我是否遗漏了与使用结构相关的内容,如果是这样的话,可以理解其他类似问题的链接。

将此程序拆分为2个main.c函数可能是相关的。 c& 。H。我是否需要在链接器文件中包含结构? main.c只调用createStruct()。

1 个答案:

答案 0 :(得分:1)

我认为变量FILE file1的定义位于main.c,而createStruct位于文件functions.c中。在这种情况下,你需要把:

extern FILES file1;

进入您的hedaer文件,并将其包含在functions.c的开头。否则,编译器不知道在另一个文件中定义了变量file1

因此,您的header.h将如下所示:

typedef struct fileProperties //the struct.
{
  char name[256]; /*File or directory name*/ 
  int mode;   /*protection and file type*/ 
  int userId; /*User ID of owner*/
  int groupId;    /*Group ID of owner*/
  int size;   /*file size in bytes*/
  char modifyTime[50];    /*modify time as a string*/
} FILES;

extern FILES file1;

您的main.c将如下所示:

#include "header.h"

FILES file1;

...

并且您的functions.c看起来像

#include "header.h"

int createStruct()
{
    ...
    strncpy(file1.name, structBuffer, sizeof(structBuffer));
...