为什么我的代码未在文件txt中写入任何内容

问题描述

一切似乎都还可以,程序正在运行,但是我的report.txt文件为空。有一个警告-“传递'fwrite'的参数2会使指针不经过强制转换而变成整数”。可能是什么问题? (以下是一些代码

int main(int argc,char *argv[]) {
    FILE *fr = fopen("report.txt","wb");
    FILE *db = NULL;
    
    if (argc > 1)  // open database file for reading,provide a parameter or use default "db.bin"
        db = fopen(argv[1],"rb");
    else
        db = fopen("db.bin","rb");
        
    if (db) {                            
        Student students[1000];           // all the data goes here
        int size = 20;                    // how many students in database
        
        fread(&size,sizeof(int),1,db); // reading data from file
        
        for (int i = 0; i < size; i++)        
            fread(&students[i],sizeof(Student),db);            

        printf("%d records loaded succesfully\n",size);
        
        
        // MODIFY CODE BELOW
        
        int counterDemo = 0;             // for counting students
        for (int i = 0; i < size; ++i) { // process all the student records in database
            Student s = students[i];     // store data for each student in s
            
            if(s.load == 0) {            // *** first filter,conditions on the student
               printf("Name - %s,surname -  %s,course -  %d,average grade -  %f,number of courses %d\n ",s.name,s.surname,s.course,s.average,s.load);
                int anotherDemo = 0;               // for counting courses/grades
                for (int i = 0; i < s.load; ++i) { // process each course taken by the student
                     if(1) {                       // *** second filter,conditions on the course/grade
                        ++anotherDemo;             // counting courses
                        printf("Course name - %s,course grades -  %d\n ",s.courses[i],s.grades[i]);
                    }
                }
                printf("Languages - %s\n",s.languages);
                printf("\n");
                        
                if (anotherDemo == s.load)        // *** third filter,varIoUs other conditions            
                    ++counterDemo;                // counting studfents
                fwrite("%s %s",&s.name,&s.surname,fr);
            }
        }
        printf("Filter applied,%d students found\n",counterDemo);                     // how many passed the filters
        fclose(db); 
    } else 
        printf("File db.bin not found,check current folder\n");
    
    return 0;
}

解决方法

为警告起见herefwrite不像printf,您需要这样写:

fwrite(s.name,strlen(s.name),1,db);
fwrite(s.surname,strlen(s.surname),db);
,

您的代码:

fwrite("%s %s",&s.name,&s.surname,fr);

我的解决方法:

fprintf(fr,"%s %s",s.name,s.surname);

您像fprintf一样使用了fwrite

所有写入功能都无法获取%s%i%d ..etc之类的参数 http://manpagesfr.free.fr/man/man3/fread.3.html(人就是生命♥o♥)

如果您没有给\ 0加上一个字符串,那么write也不会“写入” \ 0。