2009-03-14, 14:06
  #1
Medlem
R.Rs avatar
Fan, har fastnat totalt, märker att jag nog behöver fräscha upp mina kunskaper ordentligt men så länge hoppas jag på ett enkelt svar på ett problem jag har.

Ska nämligen ta in en ip adress från användaren och lagra den i en fil samt senare läsa in den och köra xor på den. I min xor rutin läser jag filen tecken för tecken med get och skriver sedan ut adressen med put till en ny fil.

Hur tar jag in ip adressen och skriver den till filen utan att få med extra tecken (vilket jag får när jag tar in ip-adressen i en string och sedan helt sonika skriver den till filen)?
Citera
2009-03-17, 17:15
  #2
Medlem
Citat:
Ursprungligen postat av R.R
Ska nämligen ta in en ip adress från användaren och lagra den i en fil samt senare läsa in den och köra xor på den. I min xor rutin läser jag filen tecken för tecken med get och skriver sedan ut adressen med put till en ny fil.

Hur tar jag in ip adressen och skriver den till filen utan att få med extra tecken (vilket jag får när jag tar in ip-adressen i en string och sedan helt sonika skriver den till filen)?

Det beror på hur du har lagrat adressen i filen och hur du representerar adressen i ditt program (och vilket programmeringsspråk och operativsystem du använder). Jag vet inte heller riktigt vad du menar med `extra tecken'.

Du kan antingen lagra adressen som en textsträng eller binärt i en fil.
Fördelarna med att lagra som en sträng är att det blir lite enklare att ändra i filen ``för hand'' nackdelarna att det blir lite jobbigare att parsa för programmet.

Internt i programmet kan du lagra adressen som en sträng, som ett 32-bitars tal eller som en char[4] buffer.

Föjande program läser in en address på strängform till en char[4] buffer, xor:ar varje element i adressen med 42 och skriver den till en fil, i detta fall stdout. Inläsning från fil sker på samma sätt som från stdin. Hoppas något klarnar.

Kod:
#include <stdlib.h>
#include <stdio.h>
int main() {

    FILE *minfil = stdout;
    char a[4];
    int r;

    printf("Ange ip-address: ");
    r = fscanf(stdin, "%hhu.%hhu.%hhu.%hhu", a, a+1, a+2, a+3);
    
    if(r!=4) {
        puts("Kunde inte laesa in address");
        return EXIT_FAILURE;
    }

    for(r=0; r<4; r++)
        a[r] ^= 42;

    fprintf(minfil, "%hhu.%hhu.%hhu.%hhu\n", a[0], a[1], a[2], a[3]);

    return EXIT_SUCCESS;
}
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in