Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C]Problem ze zmianą adresu wskaźnika w funkcji przy alokacji pamięci

Ostatnio zmodyfikowano 2014-05-08 08:18
Autor Wiadomość
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.
C/C++
#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;
}
P-109443
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 ) {
P-109455
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
P-109456
pekfos
» 2014-05-07 22:24:19
karta ** dynamiczny
 + zmiana wywołania i odwołań do dynamiczny wewnątrz funkcji.

alixir: referencja? W C..?
P-109460
alixir
» 2014-05-08 08:18:24
Ajj sorki nie zwróciłem uwagi, że to C
P-109475
« 1 »
  Strona 1 z 1