C文件的问题

时间:2017-01-26 01:43:24

标签: c file

我的代码崩溃了, 你能告诉我我做错了什么吗? 如果我隔离代码的FILE部分它不会崩溃

#include <stdio.h>
#include <stdlib.h>
struct student
{
    char* name;
    char* dorm;
};
#define NUM 3

int main()
{
    struct student students[NUM];
    int i=0;
    for(i=0;i<NUM;i++)
    {
        char* naam;
        char* daarm;
        printf("Insert name of student #%d..\n",i+1);
        scanf("%s",&naam);
        students[i].name=naam;

        printf("Now enter name of the dorm\n");
        scanf("%s",&daarm);
        students[i].dorm= daarm;

    }

    FILE* file=fopen("C:/Users/Gigg/Desktop/ricchio.txt","w");
    if(file!=NULL)
    {
        int i;
        for(i=0;i<NUM;i++)
        {
            fprintf(file,"%s,%s",students[i].name,students[i].dorm);
        }

    }
    fclose(file);

    return 0;
}

我无法在任何地方找到答案, 此外, 编译器还告诉我%s期待char *但是我给它char

1 个答案:

答案 0 :(得分:2)

请尝试以下操作。

问题

  1. 需要分配内存。
  2. 您试图使用空指针关闭文件。
  3. 注意:如果无法打开文件,请添加错误消息。应该改进大小的内存。处理冗长的用户输入。

    请参阅我的'注意事项。

    #include <stdio.h>
    #include <stdlib.h>
    #include <strings.h>
    #include <string.h>
    
    struct student
    {
        char name[1024]; // **NOTE**: magic number
        char dorm[1024]; // **NOTE**: magic number
    };
    #define NUM 3
    
    int main()
    {
        struct student students[NUM];
        int i=0;
        for(i=0;i<NUM;i++)
        {
          char naam[1024]; // **NOTE**: magic number
          bzero(naam, sizeof(naam));
          char daarm[1024]; // **NOTE**: magic number
          bzero(daarm, sizeof(daarm));
    
          printf("Insert name of student #%d..\n",i+1);
          scanf("%s",naam); // **NOTE**: input length       
          strcpy(students[i].name,naam);
    
          printf("Now enter name of the dorm\n");
          scanf("%s",daarm); // **NOTE**: input length
          strcpy(students[i].dorm,daarm);      
        }
    
        FILE* file=fopen("/tmp/test.txt",
                         "w");
        if(file!=NULL)
          {
            int i;
            for(i=0;i<NUM;i++)
              {
                fprintf(file,"%s,%s\n",students[i].name,students[i].dorm);
              }
    
            fclose(file); // **NOTE** should only be done if non-zero value. 
        } else { // NOTE: error!!!
        }
    
        return 0;
    }