как отправить массив структуры с указателем

0
struct user{
char name[25];
int level;
double grade;
char password[10];}

и я хочу записать в файл с помощью этой функции. но он работает для одного типа структуры, я хочу сохранить массив моей верхней структуры

void writeusertofile(user u){
fstream of("user.dat",ios::out|ios::app|ios::binary);
if(of.is_open()){
    of.write((char*)&u.level,sizeof(int));
    of.write((char*)&u.grade,sizeof(double));
    of.write((char*)&u.name,25*sizeof(char));
    of.write((char*)&u.password,10*sizeof(char));
}
  • 2
    а) Выберите один язык. б) Читайте о правильной сериализации и многих подводных камнях. размеры int, представление отрицательных и с плавающей точкой, выравнивание / заполнение, наборы символов ... По крайней мере, пока вы не поймете, что это чепуха.
  • 0
    Ему не нужно ничего решать, это C ++.
Показать ещё 6 комментариев
Теги:
arrays
file
struct

2 ответа

0
void writeusertofile(user u[],size_t s){
    fstream of("user.dat",ios::out|ios::app|ios::binary);
    for(int i=0;i<s;++i){
        of.write(reinterpret_cast<const char*>(&u[i]),sizeof(user));
    }
}
int main(){
    user u[3]={
        {"theName",3,55.3,"pwd"},
        {"theName2",2,74.2,"pwd2"},
        {"theName3",7,24.6,"pwd3"}
    };
    writeusertofile(u,3);

    return 0;
}
0

Я предлагаю вам хранить ваши user структуры в std::vector и определять другую функцию, подобную этой (только один пример из нескольких альтернатив):

void write_all_users_to_file(const std::vector<user>& v)
{
    //open file, check it OK
    //write the number of user records you're saving, using v.size()
    for(auto& u : v)
    {
        //do your of.writes
    }
}

Это приведет к переходу по всему вектору пользователей и сохранению каждого из них. Однако не игнорируйте комментарий от deviantfan выше - вы можете очень легко попасть в проблему при сохранении данных в файл так, как вы это делаете, тем более, что вы захотите прочитать эти вещи.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню