Uściślanie rozmiaru char

Wątek przeniesiony 2014-02-06 13:38 z C/C++ przez ŁF.

0
//...
  scanf("%1s", ins[i]);
  move(app, pp[i]+pos, ins[i], 2);
//...

void move(FILE *file, int pozycja, char* znaki, int tab)
{
    int r;
    char buf, buf2;
    char *mem;
    char znak=' ';

    // badamy wielkość pliku
    fseek (file, 0, SEEK_END);   // non-portable
    int size=ftell (file);        // size = wielkość pliku

    //alokujemy pamięć na plik, z pominięciem początku bo tego nie ruszamy
    int rozmiar = size - pozycja;
    mem = (char*)malloc(sizeof(char)*rozmiar);
    
    //ładujemy do pamięci wszystko od pozycja do końca
    fseek(file,pozycja, SEEK_SET);
    for(r=0; r<rozmiar; r++)
        mem[r] = fgetc(file);
    
    //przewijamy na pozycję i dopisujemy nowe znaki 
    for(r=0; r<=sizeof(znaki); r++)
    {
        fseek(file, pozycja+r, SEEK_SET);
        fputc(znaki[r],file);
    }

    for(r=0; r<tab; r++)
        fputc('\t', file);
    
    //jesteśmy na pozycji po ostatnim dopisanym znaku więc doklejamy resztę pliku (wcześniej wczytaną)
    for(r=0; r<rozmiar; r++)
        fputc(mem[r],file);
    
    free(mem);
}

mam sobie fragment programu wykorzystujący powyższa funckję i chce żeby i sczytywał pojedynczy znak, a oprócz niego dostaje dziwne robaczki. funkcję wykorzystuję juz wczesniej więc nie wiem czy problem nie moglby powstac z tego wlasnie powodu
Pomocy!

dodanie znacznika <code class="c"> - fp

1

Poczytaj o:

  1. Znak zakończenia napisu (c-string)
  2. Tryb binarny odczytu.
0

Gdyby jednak podpowiedź mogła być jakkolwiek konkretniejsza, bo już tyle nad tym programem siedzie że chyba nie umiem myśleć o języku C :|

1
  1. to:
  for(r=0; r<=sizeof(znaki); r++)

Jest już błąd. "znaki" to char* więc sizeof na nim da ci rozmiar wskaźnika (zapewne 4 bajty). Może chodziło ci o strlen?
2. Nie rozumiem po co te fseek w pętli. Wskaźnik pisania po pliku sam się przecież przesuwa...
3. Czytanie i pisanie znak po znaku to zły pomysł.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.