结构作为外部函数C的参数

时间:2016-01-10 15:33:22

标签: c function structure extern

我必须使用此结构读取文本文件。另外,我必须使用外部功能。我创建了文件读取代码,它在main函数中工作。

文字档案:

alpha - 第一个字符是空格*

banana 3 orange 8 music 9

但是当我尝试使用另一个c文件和外部函数进行阅读时,它没有工作...... :(

这是在documentreading.c中写的:

#include <stdio.h>
#include <stdlib.h>

struct file
{
  char name[30];
  char size;
};


int main()
{
   int n=0;
   struct file f[30];
   FILE *files;
   files=fopen("files.txt","r");
   int n=0;
    while (1)
     {
      fgetc(files);
      if(feof(files)) break;
      fscanf(files,"%s %c",&f[n].name,&f[n].size);
      n++;
     }
}

和fileReading.h:

void fileReading(struct file *f[30], FILE *files)
{
  int n=0;
 while (1)
 {
   fgetc(files);
   if(feof(files)) break;
   fscanf(files,"%s %c",&f[n].name,&f[n].size);
   n++;
 }
}

在main.c:

void fileReading(struct fisier *, FILE *);

当我编译它时,它说:

#include <stdio.h>
#include <stdlib.h>

struct file
{
  char name[30];
  char size;
};


int main()
{
   int n=0;
   struct file f[30];
   FILE *files;
   files=fopen("files.txt","r");
   fileReading(f[30],files);
}
你能帮助我吗?谢谢!

2 个答案:

答案 0 :(得分:2)

从我看来,你似乎对指针没有很好的理解。 这些更改应该可以解决您的问题:

void fileReading(struct file *f, FILE *files)
{
  int n=0;
 while (1)
 {
   fgetc(files);
   if(feof(files)) break;
   fscanf(files,"%s %c",f[n].name,&f[n].size);
   //printf("%s %c",f[n].name,f[n].size);
   n++;
 }
}
int main()
{
   int n=0;
   struct file f[30];
   FILE *files;
   files=fopen("files.txt","r");
   fileReading(f,files);
}

你做错了什么:

void fileReading(struct file *f[30], FILE *files)  //here you were saying file is a ** 
fscanf(files,"%s %c",&f[n].name,&f[n].size); // here you need to send the a char* but you were sending a char ** as a second parameter
fileReading(f[30],files); // here you were sending the 31th element of the structure array f which by the way doesn't exist (indexing is from 0 , f[29] is the last) even though that was not what you wanted to do in the first place

答案 1 :(得分:1)

文件fileReading.c不知道struct file的定义。您需要将它从main.c移动到fileReading.h和main.c和fileReading.c中的#include "fileReading.h"

此外,fileReading的定义和调用不正确。而不是:

void fileReading(struct file *f[30], FILE *files)

你想:

void fileReading(struct file *f, FILE *files)

你这样称呼它:

fileReading(f,files);

这是不正确的:

fileReading(f[30],files);

因为您传递的是单个struct file而不是数组,并且您传递的单个实例是数组末尾的一个元素(因为大小为30,有效索引为0-29 ),这可能导致不确定的行为。