c: neviem sa zbavit jednoho warningu

Sekcia: Programovanie 25.04.2007 | 01:55
Avatar Misko Kripel slackware  Používateľ
int ar_open(FILE **f, const char * path)
{
  char buf[8];
  int count;
  /* open the file */
  if ((*f = (FILE*)fopen(path, "r"))==NULL) {
    ar_error("error: cannot open file");
    return E_AR_OPEN;
    }
  /* header */
  read(*f, &buf, 8); // warning: passing arg 1 of `read' makes integer from pointer without a cast


skusal som priblizne tieto varianty prveho argumentu: f,*f,**f,***f,(FILE*)f,(FILE**)f,(FILE***)f,(FILE*)*f,... mozno som nieco zabudol, kompilujem s -Wall -pedantic
asdf
    • Re: c: neviem sa zbavit jednoho warningu 25.04.2007 | 08:49
      Avatar Samuel BWPOW Kupka Almalinux, OpenWRT  Používateľ
      Mam otazku: Aky ma vyznam volat ako vstupny argument pointer na pointer? Okrem toho funkcia read nechce argument typu FILE ale file descriptor typu int. Cize ja by som to napisal asi takto:
      int ar_open(FILE *f, const char * path)
      {
        char buf[8];
        int count;
        /* open the file */
        if ((f = fopen(path, "r"))==NULL) {
          ar_error("error: cannot open file");
          return E_AR_OPEN;
          }
        /* header */
        if(fread(buf, 1, 8, f)!=8){
          ar_error("error: subor neobsahuje ani 8 znakov, alebo nieco v tom zmysle ako chybova hlaska");
          return E_AR_NEJAKACHYBA;
        }
      ...
      
      Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
      • Re: c: neviem sa zbavit jednoho warningu 25.04.2007 | 12:05
        Avatar Misko Kripel slackware  Používateľ
        Vdaka, magicke slovo je "fread". Inak to **f je potrebne na to ked chcem so suborom dalej pracovat, napr:
        FILE *f;
        ar_open(&f,"subor.a");
        ar_read(f);

        Opravena funkcia:
        int ar_open(FILE **f, const char * path)
        {
          char buf[8];
          /* int count; */
          /* open the file */
          if ((*f = fopen(path, "r"))==NULL) {
            ar_error("error: cannot open file");
                printf("path=%s\n",path);
            return E_AR_OPEN;
            }
          /* header */
          if(fread(buf, 1, 8, *f)!=8) {
                ar_error("error: invalid archive header");
            return E_AR_HEADER;
                }
          return E_AR_OK;
        }
        asdf
        • Re: c: neviem sa zbavit jednoho warningu 25.04.2007 | 12:06
          Avatar Misko Kripel slackware  Používateľ
          aj ked to asi zmenim na:
          FILE *f;
          f = ar_open("subor.a");
          ar_read(f);
          asdf
        • Re: c: neviem sa zbavit jednoho warningu 25.04.2007 | 13:44
          Avatar Samuel BWPOW Kupka Almalinux, OpenWRT  Používateľ
          Jasne, sorry, tak skoro rano uz nerozmyslam :) Som si neuvedomil, ze ten pointer na zaciatku nikam neukazuje.
          Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
        • Re: c: neviem sa zbavit jednoho warningu 26.04.2007 | 17:40
          Avatar nardew debian  Používateľ
          mozno to bude zbytocna otazka, ale chces naozaj pracovat s binarnymi subormi? lebo fread nie je najstastnejsia volba ak nie
          • Re: c: neviem sa zbavit jednoho warningu 27.04.2007 | 16:23
            Avatar Misko Kripel slackware  Používateľ
            .a je binarny subor (ar archiv)
            asdf