Newsgroup: it.comp.lang.c
Titolo: uso del fwrite

ho usato l'fwrite per scrivere su un file .raw. però ha fatto quello che
volevo solo per alcune righe e poi si è fermato. mi spiego meglio: ho aperto
un file immagine .raw e lo ho copiato su un puntatore, poi ho copiato tale
puntatore arrey su un altro (ho verificato che la copia fosse stata fatta in
maniera corretta); poi ho creato un nuovo file su cui volevo copiare
quest'ultimo array, risultato: l'immagine esce fino ad un certo punto poi
resta tutta nera. allego listato... mi sapreste dire dove sbaglio? grazie
#include <stdio.h>
#include <stdlib.h>
     char *readimage(char *filename, int n, int m)
        {
      int h=0;
      int i, j;
      int p=m*3;
      FILE *is;
      char *temp;
      if(!(temp=(char*) malloc (n*m*3 *sizeof(char))))
        { printf ("memoria insufficiente");
          exit(0); }
      if (!(is = fopen(filename, "r")))
      { printf("file non trovato\n");
        system("pause");
       exit(1);  }
        for (i=0; i<n ; i++) {
          for (j=0; j<p ; j++){
           fscanf(is, "%c", temp+h);
           h=h+1;}}
      fclose(is);
      return temp;
      }
main()
{     char *newimg;
      char *img;
      char nome[100];
      char newname[100];
      int c,r,k,j,u,v,z;
      FILE *os;
      printf("Percorso\n");
      scanf("%s", nome);
      printf("Righe\n");
      scanf("%d", &r);
      printf("Colonne\n");
      scanf("%d", &c);
      img = readimage (nome, r, c);
      k=0;
         if(!(newimg=(char*) malloc (c*r*3 *sizeof(char))))
        { printf ("memoria insufficiente");
          exit(3); }
      printf("percorso finale\n");
      scanf("%s", &newname);
      while (k<(c*r*3))
        {
      newimg[k]= img[k];
         k=k+1;}
         os = fopen(newname,"w");
         j=0;
            for (v=0; v<(r*c*3); v++){
            fwrite(newimg+j, 1, 1,os);
            j=j+1;}
            fclose(os);
      system("PAUSE");
        return 0;
}

>>>>> 
ian...@hotmail.com
 <<<<<<
-=[]=--------iAN CooG-------=[]=-

non so dirti dove sbagli, ma solo un consiglio sull'uso di fopen:
specifica sempre il modo di apertura del file cioe' testo o binario.
nel tuo caso:
if (!(is = fopen(filename, "rb")))  /* aggiungi la 'b' */
...
os = fopen(newname,"wb");  /* aggiungi la 'b' */
questo perche' se non lo dici, viene usato il modo di deafult, che dipende
dall'implementazione del compilatore, cioe' non e' standard.
ciao
donCiccio

 ha scritto nel messaggio
news:uPQk8.30071$%g7.9...@twister2.libero.it...


 Poi avrei da obiettare sul ! anziche' != NULL
Obiezione respinta.
A parte il fatto che testare per != NULL, in 
questo caso, significa testare la condizione
contraria a quella che serve realmente, i
confronti a == NULL oppure !a sono assolutamente
equivalenti.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 equivalenti.
OK.
Mi chiedevo se NULL fosse sempre 0, o meglio (void *)0
su qualsiasi implementazione.


 Mi chiedevo se NULL fosse sempre 0
NULL vale 0 sotto qualunque piattaforma.


 NULL vale 0 sotto qualunque piattaforma.
Occhio che quello  zero non equivale necessariamente  allo zero binario.
Viene convertito  nel rappresentazione del null  pointer appropriata per
la macchina in questione.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
I went to God just to see
And I was looking at me
Saw heaven and hell were lies
When I'm God everyone dies

la macchina in questione.
Infatti, ma cio' non toglie che NULL valga 0 (zero).
Parlare di equivalente numerico, infatti, e' diverso.
Per esempio, nei sistemi Windows c'e' la fascia di indirizzi
piu' alta che e' adibita a contenere gli indirizzi del
puntatore nullo.
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]