Tworzenie buforu przy zapisie do pliku

0

Witam,

nie jestem wielkim fanem c, jednak musiałem napisać krótki programik który generuje pewne dane a następnie zapisuje do do pliku. Problem z tym, że kod wygląda następująco:

Typy zmiennych:

unsigned char *levelsArray;
unsigned char *colorsArray;
FILE *f;

Aktualny zapis do pliku:

// Petla zapisujaca dane do pliku
for (int i = 0; i < width; i++)
{
	lvl = levelsArray[i];
	fputc(colorsArray[lvl][2], f);
	fputc(colorsArray[lvl][1], f);
	fputc(colorsArray[lvl][0], f);
}

Chciałbym otrzymać mniej więcej coś takiego:

// Utwórz bufor
for (int i = 0; i < width; i++)
{
	lvl = levelsArray[i];
	// Dodaj do buforu colorsArray[lvl][2], colorsArray[lvl][1], colorsArray[lvl][0]
}
// Zapisz dane z buforu do pliku

Wszystko działa jak należy, z tym, że chciałbym stworzyć bufor tak, aby zapisać w nim wszystkie dane z pętli i następnie jednym wywołaniem funkcji zapisać je do pliku. Jeśli ktoś ma jakiś pomysł to z chęcią przetestuje, bo próbowałem wielu sposób, które poległy.

0

coś wg mnie tu nie pasuje:

unsigned char *colorsArray;
colorsArray[lvl][0]

To nie może się skompilować;
zawsze możesz dać:
fprintf(f,"%c%c%c",colorsArray[lvl][2],colorsArray[lvl][1],colorsArray[lvl][0]);
może zastanów się nad tym żeby zmienić deklaracje na:

unsigned char *colorsArray[]={{"abc"},{"def"},{"ghi"}};

wtedy możesz dać:

fprintf(f,colorsArray[levelsArray[i]]);
0

Wkradł się mały ale znaczący błąd - colorsArray jest typu unsigned char**.

Za chwile sprawdzę Twój sposób zapisu wartości z tablicy kolorów do pliku. Dzięki :D

0

Ok.. wszystko zadziałało. Problem teraz jest trochę inny.
Chciałem dodać bufor, myśląc, że dzięki temu zapis do pliku będzie szybko. Obecnie jednak szybciej działa stara metoda...

Pytanie czy znajdę coś szybszego od obecnie napisanego kawałka kodu?

0

Sprawdziłeś ten drugi wariant? Wg mnie nie w tym miejscu należy optymalizować.

0
// Zapisz dane z buforu do pliku

Ale jak zapisujesz bufor do pliku? Bo jeśli też w pętli z putc to nie bedzie szybciej ani o ιotę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1