Dobry den,
mam jeden problem s funkciou, resp, viditelnostou premennych, alebo ako by som to nazval. Prvy krat som sa rozohodol pouzit oddeleny preklad, lebo som sa prestal orientovat v jednom programiku, ktory robim, takze rad prijimem aj trochu teorie, aj prakticke rady.
Ale konkretne mam takyto cvicny priklad (realne je to komplikovanejsie, ale rovnaky princip):
subor main.c
#include <stdio.h>
#include <stdlib.h>
#include "strt.h"
#define TEST
// #undef TEST
extern int nacitaj(RIADOK *ps, int *n);
int main(int argc, char **argv)
{
int Pocet;
RIADOK *PoleRiadkov;
int i;
nacitaj(PoleRiadkov, &Pocet);
#ifdef TEST
printf("Test funkcie nacitaj\nPocet nacitanych riadkov:%d\n", Pocet);
for(i = 0; i < Pocet; i++)
printf("Riadok %d/%d \"%s\" ma pocet znakov %d\n", i+1, Pocet, (PoleRiadkov + i)->Riadok, (PoleRiadkov + i)->PocetZnakov);
#endif
return(0);
}
subor strt.h
/* definovane strktury */
typedef struct riadok{
int PocetZnakov;
char Riadok[300];
}RIADOK;
subor fun.c
#include <stdio.h>
#include <string.h>
#include "strt.h"
#define TEST
// #undef TEST
extern RIADOK *alokujPoleRIADOK(int p);
int nacitaj(RIADOK *ps, int *n);
int nacitaj(RIADOK *ps, int *n){
int i;
*n = 3;
if((ps = alokujPoleRIADOK(*n)) == NULL)
return(-1);
strcpy(ps->Riadok, "Cvicny priklad");
strcpy((ps + 1)->Riadok, "na oddeleny preklad");
strcpy((ps + 2)->Riadok, "zlyhava na viditelnosti pola struktur ::(");
for(i = 0; i < *n; i++)
(ps + i)->PocetZnakov = strlen((ps + i)->Riadok);
#ifdef TEST
for(i = 0; i < *n; i++)
printf("Riadok %d/%d \"%s\" ma pocet znakov %d\n", i+1, *n, (ps + i)->Riadok, (ps + i)->PocetZnakov);
#endif
return(0);
}
subor akok.c
/* alokacne funkcie */
#include <stdlib.h>
#include "strt.h"
RIADOK *alokujPoleRIADOK(int p);
RIADOK *alokujPoleRIADOK(int p){
return((RIADOK *) malloc(p * sizeof(RIADOK)));
}
Toto je prelozene pod Dev-C++.
Vysledok chodu programu:
Riadok 1/3 "Cvicny priklad" ma pocet znakov 14
Riadok 2/3 "na oddeleny preklad" ma pocet znakov 19
Riadok 3/3 "zlyhava na viditelnosti pola struktur ::(" ma pocet znakov 41
Test funkcie nacitaj
Pocet nacitanych riadkov:3
.............a pad programu.
Pada to na tom, ze premenna PoleRiadkov je nulova v module main.c a ja neviem preco, ked som ju odovzdal ako pointer. Pritom premenna Pocet funguje.
Prosim poradte mi ako definovat taketo pole struktur, aby to fungovalo, ako ma.
Dakujem!