Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 3 odgovora
  • 2.598 pregleda

Najnovija ↓

Potrebna pomoć oko nizova stringova 21.03.2010. u 01:58 · pre 202 meseca #1
Pozdrav svima,
Potrebna mi je konkretna pomoć u vezi sledećeg problema:
Hteo bih da skapiram kako predajem nizove stringova
funkcijama pomoću pokazivača pa sam probao sledeće:
Code:

#include <stdio.h>
#include <string.h>
#define BROJEL 5         // maksimalan broj elemenata niza
#define LIMIT 10         // maksimalan broj slova u stringu

/*** Deklaracija funkcija **************************************/

 void readString(char *p[]);
 void printString(char *p[]);

/*** Glavna funkcija *******************************************/
int main()
{
    char *string[BROJEL];
    readString(string);
    printString(string);
    return 0;
    }

/*** Funkcija kojom se cita niz stringova sa standardnog ulaza */
 void readString(char *p[])
 {
     int i;
     for(i=0;i<BROJEL;i++)
     {
         printf("%d. string:",i);
         fgets(*p[i],LIMIT,stdin);
         }
     }


/*** Funkcija kojom se stampa niz stringova na standardni izlaz*/
 void printString(char *p[])
 {
     int i;
     for(i=0;i<BROJEL;i++)
     {
         fputs(*p[i],stdout);
         putchar('\n');
         }
     }

...Međutim kao i nekoliko puta pre ovog primera dobijam 2 warning-a:

warning: passing arg 1 of `fgets' makes pointer from integer without a cast
warning: passing arg 1 of `fputs' makes pointer from integer without a cast

Molio bih vas da mi neko pojasni u čemu grešim u vezi sa datim argumentima
funkcija jer mi je veoma stalo da ovo savladam, hvala unapred !
Re: Potrebna pomoć oko nizova stringova 21.03.2010. u 08:09 · pre 202 meseca #2
Evo jedan mali primer baziran na tvom kodu. Kod fputs, ne treba ti pointer, obracas se konkretnom stringu koji je vec sam po sebi pointer. Takodje, velicinu niza stringova mozes odrediti dinamicki, pod uslovom da je definisan na ovaj nacin.

Code (c):

#include <stdio.h>
#include <stdlib.h>

char *niz_stringova[] = { "jedan", "dva", "tri", "cetiri", "pet" };

void printString( char *p[] )
{
    int i;
    for( i=0; i<sizeof(niz_stringova)/sizeof(char*); i++ )
    {
        fputs( p[i],stdout );
        putchar('\n');
    }
}

int main(void)
{
    printString( niz_stringova );
    return 0;
}
 
Re: Potrebna pomoć oko nizova stringova 25.03.2010. u 12:19 · pre 202 meseca #3
Da napravio sam par sintaksnih greški i jednu veliku logičku
koja me muči već nedeljama...
Ja ne želim da inicijalizujem elementarne stringove kao string konstante:
Code:

char *niz_stringova[] = { "jedan", "dva", "tri", "cetiri", "pet" };

U svim primerima koje sam sretao u knjigama L.Krausa i M.Čabarkape
kao i brojnih stranih autora (dakle očigledno da sam nešto sistemski propustio)
uvek se inicijalizuju nizovi stringova unapred na gorenaveden način.
Ono što ja želim je da svaki elementarni string unosim sa tastature i
interesuje me kako to da izvedem pomoću funkcije fgets a da mi program
ne puca posle prvog unetog stringa što mi se trenutno dešava.

Deklaracija niza stringova u main funkciji:
Code:

char *string[BROJEL];

...govori o tome koliki je broj stringova konstantom BROJEL ali
kako da odredim broj karaktera (bajtova) koji svaki string zauzima?

Mislim da mi to uzrokuje pucanje programa nakon prvog unosa u funkciji:
Code:

/*** Funkcija kojom se cita niz stringova sa standardnog ulaza */
 void readString(char *p[])
 {
     int i;
     for(i=0;i<BROJEL;i++)  
     {
         printf("%d. string:",i);
         fgets(p[i],LIMIT,stdin); 
         }
     }

Re: Potrebna pomoć oko nizova stringova 26.03.2010. u 18:18 · pre 202 meseca #4
Evo rešenja,uz veliku pomoć prijatelja,
zašto su problemi tako komplikovani a
rešenja tako j... jednostavna!
Code:

#include <stdio.h>
#include<stdlib.h>
#include <string.h>

#define BROJEL 5         // maksimalan broj elemenata niza
#define LIMIT 10         // maksimalan broj slova u stringu

/*** Deklaracija funkcija **************************************/

 void readString(char *p[]);
 void printString(char *p[]);
 void clearMemory(char *p[]);

/*** Glavna funkcija *******************************************/
int main()
{
    char *string[BROJEL];
    readString(string);
    printString(string);
    clearMemory(string);
    return 0;
}

/*** Funkcija kojom se cita niz stringova sa standardnog ulaza */
 void readString(char *p[])
 {
     int i;

     for(i=0;i<BROJEL;i++)
     {
         printf("%d. string:",i);
         p[i]=(char*)malloc(10*(sizeof(char)));
         fgets(p[i],10,stdin);
     }
 }


 /*** Ne zaboravi da obrises memoriju s heap-a da ne bi doslo do memory leak-a*/
 void clearMemory(char *p[])
 {
     int i;
     for(i=0;i<BROJEL;i++)
         free(p[i]);
 }

/*** Funkcija kojom se stampa niz stringova na standardni izlaz*/
 void printString(char *p[])
 {
     int i;
     for(i=0;i<BROJEL;i++)
     {
         puts(p[i]);
         putchar('\n');
     }
 }
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme