Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Potrebna pomoć oko nizova stringova

[es] :: C/C++ programiranje :: C/C++ za početnike :: Potrebna pomoć oko nizova stringova

[ Pregleda: 2007 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

amanteo
student,Pupin-Zrenjanin

Član broj: 168025
Poruke: 42
*.dynamic.sbb.rs.



+1 Profil

icon Potrebna pomoć oko nizova stringova21.03.2010. u 00:58 - pre 171 meseci
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 !
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
212.200.65.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Potrebna pomoć oko nizova stringova21.03.2010. u 07:09 - pre 171 meseci
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;
}
 
 
Odgovor na temu

amanteo
student,Pupin-Zrenjanin

Član broj: 168025
Poruke: 42
*.dynamic.sbb.rs.



+1 Profil

icon Re: Potrebna pomoć oko nizova stringova25.03.2010. u 11:19 - pre 171 meseci
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); 
         }
     }

 
Odgovor na temu

amanteo
student,Pupin-Zrenjanin

Član broj: 168025
Poruke: 42
*.dynamic.sbb.rs.



+1 Profil

icon Re: Potrebna pomoć oko nizova stringova26.03.2010. u 17:18 - pre 171 meseci
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');
     }
 }
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Potrebna pomoć oko nizova stringova

[ Pregleda: 2007 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.