rastaman697 Temat założony przez niniejszego użytkownika |
[C]Problem ze zmianą adresu wskaźnika w funkcji przy alokacji pamięci » 2014-05-07 20:48:00 Witam mam problem w funkcji wczytaj w której alokuję pamięć. Ta funkcja potrzebna jest mi ponieważ muszę ją użyć w jeszcze jednej funkcji niż tylko main przedstawiam kod programu. #include <stdlib.h> #include <stdio.h>
typedef struct typ_karta { char imie[ 10 ]; char nazwisko[ 10 ]; char nrIndeksu[ 10 ]; char wydzial[ 10 ]; int rok; } karta;
int ile_linijek() { char zn[ 50 ]; static int spacje = 0; FILE * plik3; plik3 = fopen( "E:\\c\\test.txt", "a+" ); while( !feof( plik3 ) ) { if( fgets( zn, 50, plik3 ) != NULL ) spacje++; } fclose( plik3 ); return spacje; }
void wyswietl_studentow( karta * tab, int * ilosc ) { int x; for( x = 0; x < * ilosc; x++ ) { printf( "%s/n", tab[ x ].imie ); } } void wczytanie( karta * dynamiczny, FILE * plik ) { int ilosc = ile_linijek(); dynamiczny =( karta * ) malloc( sizeof( karta ) * ilosc ); int i = 0; char znaki[ 55 ]; int a; for( i = 0; i < ilosc; i++ ) { fscanf( plik, "%s", znaki ); strcpy(( dynamiczny + i )->imie, znaki ); fscanf( plik, "%s", znaki ); strcpy(( dynamiczny + i )->nazwisko, znaki ); fscanf( plik, "%s", znaki ); strcpy(( dynamiczny + i )->nrIndeksu, znaki ); fscanf( plik, "%s", znaki ); strcpy(( dynamiczny + i )->wydzial, znaki ); fscanf( plik, "%d", & a ); ( dynamiczny + i )->rok = a; } } void dodajstudenta() { FILE * plik; int rok = 0; char znaki[ 50 ]; plik = fopen( "E:\\c\\test.txt", "a" ); fprintf( plik, "\n" ); printf( "podaj imie studenta\n" ); scanf( "%s", znaki ); fprintf( plik, "%s", znaki ); printf( "podaj nazwisko studenta\n" ); scanf( "%s", znaki ); fprintf( plik, "%s\t", znaki ); printf( "podaj numer indeksu studenta\n" ); scanf( "%s", znaki ); fprintf( plik, "%s\t", znaki ); printf( "podaj wydzial studenta\n" ); scanf( "%s", znaki ); fprintf( plik, "%s\t", znaki ); printf( "podaj rok studiow studenta\n" ); scanf( "%d", & rok ); fprintf( plik, "%d", & rok ); fclose( plik ); }
int main() { FILE * plik; karta * dynamiczny; plik = fopen( "E:\\c\\test.txt", "r" ); wczytanie( dynamiczny, plik ); fclose( plik ); printf( "%s", dynamiczny[ 0 ].imie ); dodajstudenta(); system( "PAUSE" ); return 0; }
|
|
alixir |
» 2014-05-07 21:40:54 Przekazując argument poprzez wskaźnik jesteś w stanie zmieniać zawartość na którą wskazuje dany wskaźnik, lecz nie jesteś w stanie zmieniać samego wskaźnika. Zmień zapis na taki: void wczytanie( karta *& dynamiczny, FILE * plik ) { |
|
rastaman697 Temat założony przez niniejszego użytkownika |
» 2014-05-07 21:51:17 NIe działa to u mnie używam VS 2013 |
|
pekfos |
» 2014-05-07 22:24:19 karta ** dynamiczny + zmiana wywołania i odwołań do dynamiczny wewnątrz funkcji. alixir: referencja? W C..? |
|
alixir |
» 2014-05-08 08:18:24 Ajj sorki nie zwróciłem uwagi, że to C |
|
« 1 » |