Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /var/www/vhosts/bilgigunlugum.net/httpdocs/index.php on line 43
C Programlama

BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C örnek kodlar > c_multi_size_array_file_opr_pointer

C örnek kodlar

2 boyutlu integer bir dizi elemanları ile ilgili değer atama, dosyaya yazma, dosyadan okuma ve ekrana yazma işlemlerini işaretçi ve bellek tahsisi ile gerçekleştirme

Program sırasıyla aşağıdaki işlemleri gerçekleştirir:

  • 4 x 5 boyutlarında integer bir dizi elemanlarını içerebilecek şekilde bellek tahsis ederek ip adlı işaretçiye atar.
  • İşaretçi endeksleme yoluyla belleğe 1-20 arasındaki sayıları atar ve atadığı değerleri ekrana yazar.
  • Yazma işlemleri için bir dosya açar.
  • Tahsis edilen bellekte yer alan değerleri fwrite() fonksiyonu ile dosyaya yazar.
  • Dosyanın tüm içeriğini fread() fonksiyonu ile tahsis edilen belleğe aktarır.
  • Bellekte yer değerleri tekrar ekrana yazar.
  • Tahsis edilen belleği boşaltılır.

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

int main(void)
{
  FILE *fp;
  int rows = 4;
  int cols = 5;
  int id1, id2, id3;

  // İşaretçi oluşturma ve bellek tahsisi
  int **array = (int **)malloc(rows * sizeof(int *));
  for (id1=0; id1<rows; id1++) {
       array[id1] = (int *)malloc(cols * sizeof(int));
  }

  // Değer atama
  for (id1=0, id3=1; id1<rows; id1++) {
       for (id2=0; id2<cols; id2++) {
            array[id1][id2] = id3++;
       }
  }

  // Değerleri ekrana yazma
  for (id1=0; id1<rows; id1++) {
       for (id2=0; id2<cols; id2++) {
            printf("%d ", array[id1][id2]);
       }
       printf("\n");
  }

  // Yazma işlemleri için dosya açma
  if ((fp = fopen ("dizi.bin", "wb")) == NULL) {
      printf("Dosya açma hatası!");
  }

  // Tüm dizi değerlerini dosyaya yazma
  for (int id1=0; id1<rows; id1++) {
         for (int id2=0; id2<cols; id2++) {
              if(fwrite(&array[id1][id2], sizeof(int), 1, fp) != 1) {
                 printf("Dosya yazma hatası!");
              }
         }
  }

  // Dosya kapatma
  fclose(fp);

  // Okuma işlemleri için dosya açma
  if ((fp = fopen ("dizi.bin", "rb")) == NULL) {
      printf("Dosya açma hatası!");
  }

  // Tüm dizi değerlerini dosyadan okuma
  for (int id1=0; id1<rows; id1++) {
         for (int id2=0; id2<cols; id2++) {
              if(fread(&array[id1][id2], sizeof(int), 1, fp) != 1) {
                 printf("Dosya yazma hatası!");
              }
         }
  }

  // Dosya kapatma
  fclose(fp);

  printf("\nDosyadan okunan değerler\n");

  // Dosyadan okunan değerleri ekrana yazma
  for (id1=0; id1<rows; id1++) {
       for (id2=0; id2<cols; id2++) {
            printf("%d ", array[id1][id2]);
       }
       printf("\n");
  }

  // Tahsis edilen belleğin boşaltılması
  for (int id1=0; id1<rows; id1++) {
       free(array[id1]);
  }
  free(array);

  return 0;
}

Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20

Dosyadan okunan değerler
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20