• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Operacje na plikach C

Object Storage Arubacloud
0 głosów
343 wizyt
pytanie zadane 30 maja 2015 w C i C++ przez Oxie Nowicjusz (120 p.)
edycja 30 maja 2015 przez Oxie

Witam, mam mały problem :) po utworzeniu pliku tekstowego i zapisaniu do niego dowolnej linii tekstu np"Ala ma kota", oraz ponownym otwarciu tego pliku i odczytaniu tekstu oprocz niego pojawiają się dodatkowe znaki, jak przy wyjściu poza obszar stringa, jednak jezeli otwieram tym sposobem juz istniejacy plik wszystko jest w porzadku. Jeżeli ktoś byłby w stanie wskazać błąd ewentualnie nakierować mnie co poprawić byłbym wdzięczny :)

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>






int main()
{
    FILE *plik;
    char tekst[200];
    char *pomocnicza;
    char *bufor;
    int size,i;




    gets(tekst);
    if((plik=fopen("dane.txt","w"))==NULL)
    {
        printf("Blad zapisu plkiu\n");
        return 0;
    }

    fputs(tekst,plik);

    fclose(plik);

    plik=fopen("dane.txt","r");

    if((plik==NULL))
    {
        printf("Blad odczytu\n");
        return 0;
    }

    fseek(plik,0,SEEK_END);

    size=ftell(plik);

    bufor=(char*)malloc(sizeof(*bufor)*size);

    rewind(plik);

    fgets(bufor,size+1,plik);

    fclose(plik);

    pomocnicza=(char*)malloc(size*sizeof(*bufor));

    for(i=0; i<size; i++)

    {

            pomocnicza[i]=bufor[size-i-1];

    }

    printf("%s",pomocnicza);

    free(bufor);
    bufor=NULL;


    free(pomocnicza);
    pomocnicza=NULL;

    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 30 maja 2015 przez Wiciorny Ekspert (270,910 p.)
 Spróbuj tego 
 fseek(plik,0,SEEK_END); 

// zamień na   fseek(plik,0,0);     ( czyli doda do wartosci 0, bo tak dodaje wartosc końcową pliku a nie wiem czy o to Ci chodzi. ) 

 

komentarz 30 maja 2015 przez Oxie Nowicjusz (120 p.)
hmm fseek ma tu za zadanie ustawić wskaźnik na końcu pliku czyli  trzeci arguemnt funkcji fseek, SEEK_END ustawia wskaźnik na końcu pliku w przypadku 0 ustawiony zostałby chyba na początku.

Ogólnie chodzi mi o to, żeby zapisać stringa do pliku poźniej odczytać go i tekst odwrócić.

Dla gotowego pliku po usunięciu fragmentu kodu odpowiedzialnego za zapis do pliku wszystko dziala poprawnie. Natomiast jezeli zapisze, wczytam nie idzie wszystko po mojej mysli :D

przykładowao dla tekstu "ala ma kota" otrzymuje

"atok am alales (0File" i niestety nie moge sie doszukac co powoduje ten błąd,  dopiero się ucze :)
komentarz 30 maja 2015 przez Wiciorny Ekspert (270,910 p.)

Wydaje mi się, że wina lezy w fgets. Na końcu fgets() dopisuje znak '\0' zawsze, a ty do wartości size dodajesz +1 

Funkcja przerywa czytanie , gdy przeczyta size - 1 znaków. Spróbuj. Bo być może nie wliczyłeś tego, ze sama funkcja dodała  znak końca 

komentarz 31 maja 2015 przez Oxie Nowicjusz (120 p.)
Tam też raczej wszystko jest w porządku, tak sprawdzając to jeszcze raz problem może tkwić gdzieś w alkoacji bo po pewnym kroku nie wiem dlaczego dla tekstu np 11 znakowego po wszystkich operacjach rozmiar "pomocnicza" się podwaja, chyba że wyzeruje go po alokacji, to działa jak powinien. Ale glownie chodzi mi o to żeby zrozumiec dlaczego tak sie dzieje :D

Podobne pytania

0 głosów
0 odpowiedzi 315 wizyt
pytanie zadane 8 grudnia 2018 w C i C++ przez matiibal Użytkownik (620 p.)
0 głosów
1 odpowiedź 124 wizyt
0 głosów
0 odpowiedzi 175 wizyt
pytanie zadane 29 stycznia 2018 w C i C++ przez Artur313 Użytkownik (790 p.)

92,631 zapytań

141,498 odpowiedzi

319,869 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...