データベースエントリを含むファイルを受け入れるプログラムを作成しています。エントリはすべて同じ形式で、データは同じ順序です。ファイルの最初の数字はエントリの数です。その場合、データは次のようになります。LastNameFirstNameStudentID年齢年GPAexpectedGraduationDate
例:Doe John1234567823新入生4.02013
私の問題は年の値です。タイプ「クラス」として宣言することになっています。enum class{freshman, sophomore, junior, senior, grad};
次の宣言を含むヘッダーファイルがあります。
typedef enum {firstYear, sophomore, junior, senior, grad} class;
次に、私のメインファイル:
#include <stdio.h>
#include <stdlib.h>
#include "class.h"
int main(int argc, char *argv[]){
typedef struct{
int DBrecordID; //ID for each entry, range 0-319
char *last; //student last name
char *first; //student first name
char studentID[8]; //student ID
int age; //student age
class year; //year in school
float gpa; //GPA
int expGradYear; //expected graduation year
}DBrecord;
int numEntries;
DBrecord **record;
char buffer[80];
FILE *fpt;
int c, i;
int j = 0;
//check for invalid file arguments
if(argc != 2){
printf("Number of arguments is invalid\n");
exit(1);
}
//error if unable to open file
if((fpt = fopen(argv[1], "r")) == NULL){
printf("Error: Couldn't open file.\n");
exit(1);
}
//set file pointer to read passed file
fpt = fopen(argv[1], "r");
//scan first int in file and assign to numEntries
//fscanf(fpt, "%d", &numEntries);
//allocate memory for structures, each is 36 bytes
*record = malloc (sizeof (DBrecord) * numEntries);
//loop through each DB entry
do{
for(i=0; i<numEntries; i++){
numEntries = record[i]->DBrecordID;
do{
c=fgetc(fpt);
buffer[j++] = c;
}while(c != ' ');
strcpy(record[i]->last, buffer);
j=0;
do{
c=fgetc(fpt);
buffer[j++] = c;
}while(c != ' ');
strcpy(record[i]->first, buffer);
j=0;
do{
c=fgetc(fpt);
buffer[j++] = c;
}while(c != ' ');
strcpy(record[i]->studentID, buffer);
j=0;
do{
c=fgetc(fpt);
memcpy(c, buffer[j++], 1);
}while(c != ' ');
memcpy(buffer, record[i]->year, 4);
j=0;
do{
c=fgetc(fpt);
buffer[j++] = c;
}while(c != ' ');
memcpy(buffer, record[i]->gpa, 4);
j=0;
do{
c=fgetc(fpt);
buffer[j++] = c;
}while(c != ' ' || c != '\n');
memcpy(buffer, record[i]->expGradYear, 4);
j=0;
}
}while(c != EOF);
return 0;
}
*更新されたエラー
main.c:75:警告: `memcpy'の引数1を渡すと、キャストなしで整数からポインターが作成されます
main.c:75:警告: `memcpy'の引数2を渡すと、キャストなしで整数からポインターが作成されます
main.c:77:`memcpy'の引数2と互換性のない型
main.c:83:`memcpy'の引数2と互換性のない型
main.c:89:警告: `memcpy'の引数2を渡すと、キャストなしで整数からポインターが作成されます
main.c:94:「DBrecord」の前の解析エラー
ですから、私はmemcpyでやろうとしていることができないか、間違っているだけだと思います。提案?