C programozás

Kezdőlap Fórumok Programozás C programozás

10 bejegyzés megtekintése - 161-170 / 352
  • Szerző
    Bejegyzés
  • #2016256
    szati
    Felhasználó

      Helló,

      egy problémám van egy egyszerû kis c programmal. A program a következõ:

      Code:
      #include                                                                                
      #include
      #include

      #define KEZDETI 50
      #define ADD 10

      int prim(int num, int * primek,int * index) {

      //prímszámok tárolására szolgáló tömb
      int n,k,f; // ciklusváltozók
      int size; //eddig lefoglalt memória mérte a primek tömb számára

      size = sizeof(int) * KEZDETI;
      primek = malloc(size);

      if (primek == NULL) { printf(„Nem tudtam elég memóriát folalni.n”);return -1;}

      primek[0] = 2;
      primek[1] = 3;
      *index = 2;
      f = 0;

      for(n = 5; n < num;n = n+2) { for(k = 1; k < (*index); ++k) { if(!(n % primek[k] > 0)) {
      //a mar nem lehet prím
      f = 1;
      break;
      }
      }

      if(f == 0)
      {
      if(size >= ((*index) – 1)) {
      size = size + sizeof(int) * ADD;
      primek = realloc(primek,size);
      }
      primek[(*index)++] = n;

      }else{ f = 0;}

      }

      }
      int main() {

      int * primek = NULL;
      int index = 0;
      prim(781, primek, &index);

      return 0;
      }

      MIndebben a lényeg anyi hogy van a prim függvény ami az int * primek argumentumán kapott tömbbe beírja a int num argumentumként átadott számig az összes prímet és a tömb hosszát elhelyezi a int * index argumentumba.

      Ez mind szép és jó a probléma ott van hogy mielött befejezõdik a prim függvény a tömb megfelelõen van kitöltve (debugerrel megnéztem) de miután visszakerül a vezérlés a main-ba  már nem a megfelelõ értékeket tartalmazza a tömb.

      Miért van ez?  Az lehet a probléma hogy a prim()-be folalom a szügséges memóriaterületet nem a main()-ba? Vagy valami egyéb?

      Elõre is köszi a segítséget

      #2016257
      szati
      Felhasználó

        Megtaláltam a megoldást. Az volt a probléma hogy a realloc()-tól visszakapott primek már nem az volt amit eredetile átadott main().

        #2016258
        szati
        Felhasználó

          Sziasztok ismét azért fordulok hozzátok mert egy kis problémám támadt.

          Egy progit írok ami a tar-t használja segédprogramként, vagyis a program mûködés közben elindítja a tar-t.

          A tarnak nincsen más feladata mint  megadott arhívum tartalmának kilistázása. Ugyebár odáig minde rendben hogy fork() és execvp(). A probléma ott kezdõdik hogy a tar a kimenetet a terminalra fogja írni.

          #2016259
          goraki
          Felhasználó

            FILE *pipe;
            pipe=popen(„tar …”, „r”);

            innentöl fileként kezeli.
            Nem biztos, hogy menni fog, de a Pere László féle Programozás C nyelven c. könyvben ilyesmi van:D

            #2016260
            szati
            Felhasználó
              Code:
              FILE *pipe;
              pipe=popen(„tar …”, „r”);

              innentöl fileként kezeli.
              Nem biztos, hogy menni fog, de a Pere László féle Programozás C nyelven c. könyvben ilyesmi van:D

              Hanyadik oldal?  hirtelen nem találom

              #2016261
              szati
              Felhasználó

                Amúgy én az mknode() ra gondoltam a pipe létrehozásánál eredetileg.

                #2016262
                goraki
                Felhasználó

                  180. oldal.

                  #2016263
                  szati
                  Felhasználó

                    113. oldalon van a getline() ezzel lehet olvasni ha jól értem.

                    #2016264
                    goraki
                    Felhasználó

                      Nekem ez jól megy:

                      Code:
                      #include
                      #include
                      #include
                      int main(){
                      FILE *pipem;
                      char sor[256];
                      pipem=popen(„ls -al”, „r”);
                      if(pipem==NULL){
                      printf(„nem ment”);
                      }
                      while(fgets(sor, 255, pipem)){
                      printf(„%s”, sor);
                      }
                      return 1;
                      }
                      #2016265
                      szati
                      Felhasználó

                        oké köszi akkor én is megpróbálom

                      10 bejegyzés megtekintése - 161-170 / 352
                      • Be kell jelentkezni a hozzászóláshoz.