我已经宣布了这样的结构。
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()。
答案 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));
...