klaphson Temat założony przez niniejszego użytkownika |
Zapis do pliku » 2016-11-28 20:51:09 Witam! Mam problem mianowicie za każdym razem gdy próbuję wywołać funkcję zapisz cookolwiek tam proboje wpisac do pliku wyskakuje mi ERROR Stream != NULL. Poradzcie coś jak zapisać do pliku zawartość tablicy dane[j] .
Program rozbity na kilka plików(PS pliku header nie wklejam):
main.c
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include "pgm.h" #include <string.h>
int main() { int i, j, d; struct pgm obrazPGM, * obpgm, * obpgm1 = NULL, * obpgm2 = NULL, * obpgm3; obpgm = & obrazPGM; obpgm =( struct pgm * ) malloc( 1 * sizeof( struct pgm ) ); stworz(); printf( "Podaj nazwe pliku: " ); gets( obpgm->nazwaPliku ); while( 1 ) { printf( "Wczytaj - 1 Wyswietl - 2 Usun - 3 Zapisz - 4 Wyjdz - 0\n" ); scanf( "%d", & d ); if( d == 0 ) break; switch( d ) { case 1: obpgm1 = wczytaj( obpgm->nazwaPliku, obpgm ); break; case 2: wyswietl( obpgm1 ); break; case 3: usun( obpgm1 ); break; case 4: obpgm3 = & obrazPGM; obpgm2 =( struct pgm * ) malloc( 1 * sizeof( struct pgm ) ); printf( "Podaj nazwe pliku: " ); gets( obpgm3->nazwaPliku ); zapisz( obpgm3->nazwaPliku, obpgm1 ); break; default: printf( "Nieprawidlowy wybor\n" ); break; } } system( "pause" ); return 0; } [ cpp ] pgm.c
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include "pgm.h"
struct pgm * wczytaj( char * nazwa, struct pgm * foto ) { int i, j; FILE * plik; plik = fopen( nazwa, "r" ); if( plik == NULL ) printf( "Nie mozna otworzyc pliku\n" ); foto->koment =( char * ) calloc( 100, sizeof( char ) ); fgets( foto->p2, 10, plik ); fgets( foto->koment, 100, plik ); fscanf( plik, "%d %d", &( foto->k ), &( foto->w ) ); fscanf( plik, "%d", &( foto->sk ) ); ( foto->dane ) =( int ** ) calloc( foto->k, sizeof( int * ) ); for( i = 0; i <( foto->k ); i++ ) { foto->dane[ i ] =( int * ) calloc( foto->w, sizeof( int ) ); } for( i = 0; i <( foto->w ); i++ ) { for( j = 0; j <( foto->k ); j++ ) { fscanf( plik, "%d", &( foto->dane[ j ][ i ] ) ); } } fclose( plik ); return foto; }
void wyswietl( struct pgm * obpgm1 ) { int i, j; printf( "Nazwa pliku to: %s\n", obpgm1->nazwaPliku ); printf( "P2: %s", obpgm1->p2 ); printf( "Komantarz: %s", obpgm1->koment ); printf( "Parametry k,w,sk: %d %d %d\n\n", obpgm1->k, obpgm1->w, obpgm1->sk ); for( i = 0; i <( obpgm1->w ); i++ ) { for( j = 0; j <( obpgm1->k ); j++ ) { } } }
void stworz() { FILE * plik; int a, b; plik = fopen( "gradient.pgm", "w" ); fputs( "P2 \n", plik ); fputs( "256 50 \n", plik ); fputs( "255 \n", plik ); for( a = 0; a < 50; a++ ) { for( b = 0; b < 256; b++ ) { fprintf( plik, " %d ", b ); } fputs( "\n", plik ); } fclose( plik ); }
void zapisz( char * nazwa, struct pgm * obpgm1 ) { FILE * plik; int h, g; plik = fopen( nazwa, "w" ); fclose( plik ); }
void usun( struct pgm * foto ) { int i; if( foto->dane != NULL ) { for( i = 0; i <( foto->k ); i++ ) { free( foto->dane[ i ] ); } free( foto->dane ); foto->dane = NULL; printf( "Paniec zwolniona\n" ); } else { printf( "Pamiec zostala juz wczesniej zwolniona\n" ); } }
[ cpp ] |
|
1aam2am1 |
» 2016-11-28 21:11:36 To na pierwszy ogień: struct pgm obrazPGM, * obpgm, * obpgm1 = NULL, * obpgm2 = NULL, * obpgm3; obpgm = & obrazPGM; obpgm =( struct pgm * ) malloc( 1 * sizeof( struct pgm ) );
obpgm3 = & obrazPGM; obpgm2 =( struct pgm * ) malloc( 1 * sizeof( struct pgm ) );
zapisz( obpgm3->nazwaPliku, obpgm1 );
Na razie to na tyle z mojej strony. PS. Pomyśl co robi każda linijka. |
|
klaphson Temat założony przez niniejszego użytkownika |
» 2016-11-28 21:18:38 dalej to samo, dodam też że program mi się kompiluje a ten błąd wyskakuje gdy w uruchomionym programie wybieram opcje ZAPIS |
|
1aam2am1 |
» 2016-11-28 21:59:27 Bez kodu struktury nic ci więcej nie powiem. Ale zapewne pracujesz na dwóch różnych obiektach. Użyj debugera aby dowiedzieć się jakie zmiany w danej strukturze powoduje twój kod. |
|
klaphson Temat założony przez niniejszego użytkownika |
» 2016-11-28 22:07:30 #ifndef _ABC_ #define _ABC_
struct pgm { char nazwaPliku[ 100 ]; char p2[ 10 ]; char * koment; int k, w, sk; int ** dane; };
struct pgm * wczytaj( char *, struct pgm * ); void wyswietl( struct pgm * ); void usun( struct pgm * ); struct pgm * zapisz( char *, struct pgm * ); void stworz(); #endif
[ cpp ] |
|
« 1 » |