---
title: "c++ binärt och listor"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/155736-c-binärt-och-listor"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "jboy_87"
published: "2007-01-08T17:38:22.000Z"
updated: "2007-01-12T01:15:07.000Z"
replies: 9
views: 748
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/155736-c-binärt-och-listor"
---

# c++ binärt och listor

## #1 — jboy_87, 2007-01-08T17:38Z

\--

Permalänk: https://www.webforum.nu/p/155736

## #2 — Peter S, 2007-01-10T10:28Z

1. Använd gärna kodtaggar
2. Vad är det som inte fungerar?
3. Du fyller ju ingen *struktur* som du sedan lägger i listan

```
#include <fstream>
#include <list>
#include <cstring>

using namespace std;

struct struktur {
  char namn[40];
  char tele[40];
} data;

void skrivfil(list<struktur> &lista);
void meny(list<struktur>& lista);

int main() {
  list<struktur> lista;
  strncpy(data.namn,"foo",40);
  strncpy(data.tele,"bar",40);
  lista.insert(lista.begin(), data);
  meny(lista);
  return 0;
}

void meny(list<struktur>& lista) {
  skrivfil(lista);
}

void skrivfil(list<struktur> &lista) {
  fstream fil;
  fil.open("lista.dat", ios::binary|ios::out);
  //Konventera data till char
  fil.write((const char*)&(*lista.begin()), sizeof(struktur)); // 80 tecken
  fil.close();
}
```

Permalänk: https://www.webforum.nu/p/1919524

## #3 — jboy_87, 2007-01-10T15:21Z

\--

Permalänk: https://www.webforum.nu/p/1919604

## #4 — Peter S, 2007-01-10T16:05Z

1. Använd gärna kodtaggar
2. Vad är det som inte fungerar?

Permalänk: https://www.webforum.nu/p/1919626

## #5 — jboy_87, 2007-01-10T16:36Z

Infogar hela källkoden!

1\.Skulle vara tacksam om du kunde fixa scriptet!

2\. **Har problem med att läsa binärfilen**

3\. Måste jag loopa hela här med en iterator för att skriva hela listan till en binär fil?

```
binary_file.write((const char*)&(*lista.begin()), sizeof(struktur));
```

Bilagor:

- [lista.txt](https://www.webforum.nu/a/13443.txt)

Permalänk: https://www.webforum.nu/p/1919635

## #6 — Peter S, 2007-01-10T16:53Z

Det är nog bättre om du dokumenterar och löser problemet själv. Däremot kan jag ge exempel:

```
#include <fstream>
#include <iostream>
#include <list>
#include <cstring>

using namespace std;

struct struktur {
  char namn[40];
  char tele[40];
} data;

void skrivfil(list<struktur> &lista);
void listamatain(list<struktur> &lista);
void meny(list<struktur>& lista);

int main() {
  list<struktur> lista;
  meny(lista);
  return 0;
}

void meny(list<struktur>& lista) {
  listamatain(lista);
  skrivfil(lista);
}

void listamatain(list<struktur> &lista) {
  char val;
  int antal = 0;

  struktur data; // Skapa ny struktur

  while (antal == 0 || val == 'j' || val == 'J') { 
    cout << " Ange namn: ";
    memset(data.namn, 0, 40);
    cin.getline(data.namn, 40); // Mata in värdet i strukturen
    cout << " Ange telefonnummer: ";
    memset(data.tele, 0, 40);
    cin.getline(data.tele, 40); // Mata in värdet i strukturen

    lista.push_back(data); // skjut in värdet från strukturen längst in i listan

    cout << "\n Vill du mata in fler uppgifter i listan? (j/n): ";
    cin >> val;
    cin.ignore();
    cout << "\n";
    antal++;
  }
}

void skrivfil(list<struktur> &lista) {
  fstream fil;
  fil.open("lista.dat", ios::binary|ios::out);
  list<struktur>::const_iterator it = lista.begin();
  while (it != lista.end()){
    fil.write((const char*)&(*it), sizeof(struktur)); // 80 tecken
    ++it;
  }
  fil.close();
  fil.open("lista.dat", ios::binary|ios::in);
  while (!fil.eof()){
    struktur s;
    memset(s.namn, 0, 40);
    memset(s.tele, 0, 40);
    fil.read(s.namn, 40);
    fil.read(s.tele, 40);
    cout << s.namn << " " << s.tele << endl;
  }
  fil.close();
}
```

Permalänk: https://www.webforum.nu/p/1919640

## #7 — jboy_87, 2007-01-10T17:12Z

om jag vill göra så här da?

```
fstream fil("lista.dat",ios::binary|ios::in);
             
     list<struktur>::iterator it;
     it = lista.begin();
             
     while (it != lista.end()) {
           fil.read((char*)&(*it), sizeof(struktur));
           lista.push_back((*it));
           it++;
     }
             
     fil.close();
```

Permalänk: https://www.webforum.nu/p/1919649

## #8 — Peter S, 2007-01-10T18:10Z

Det verkar inte rimligt. Du vill alltså skriva det som finns i list\<\>:an, med innehållet i filen? Vad händer om det finns mer information i filen än storleken på *lista* \- då kommer inte datat i slutet av filen med?

```
list<struktur> l;
       
while (!fil.eof()) {
     struktur s;
     memset(s.namn, 0, 40);
     memset(s.tele, 0, 40);
     fil.read(s.namn, 40);
     fil.read(s.tele, 40);
     l.push_back(s);
}
```

Permalänk: https://www.webforum.nu/p/1919662

## #9 — jboy_87, 2007-01-11T15:34Z

vad betyder memset?

Permalänk: https://www.webforum.nu/p/1920010

## #10 — Peter S, 2007-01-12T01:15Z

Den funktionen sätter ett specificerat antal bytes till ett visst värde, med start på ett angivet utrymme i minnet.

Permalänk: https://www.webforum.nu/p/1920123

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/155736-c-binärt-och-listor
