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

Ansi C i niz promenljive dužine - problem oko kompajliranja.

[es] :: C/C++ programiranje :: Ansi C i niz promenljive dužine - problem oko kompajliranja.

[ Pregleda: 1110 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mixxit
student

Član broj: 303319
Poruke: 3
*.dynamic.isp.telekom.rs.



Profil

icon Ansi C i niz promenljive dužine - problem oko kompajliranja.22.05.2012. u 20:10 - pre 145 meseci
Zdravo svima!

Moj problem (žao mi je što počinjem ovako, ali..) je oko kompjaliranja koda u kompajleru (ANSI C kompatibilan).
Kompajler mi javlja grešku tipa: "Array dimension must be greater than 0"

Pokušao sam da izguglam rešenje, ali nisam uspeo (relativni početnik sam u korišćenju C jezika ~par meseci) da ga nađem. Koliko sam shvatio čitajući razne postove sa drugih foruma o sličnim temama stekao sam utisak da kompajleru pravi problem niz sa promenljivom dužinom.

Program koji pišem predstavlja modifikovanu verziju K&R kalkulatora sa inverznom poljskom notacijom.
Na mom nativnom sistemu (Ubuntu - linux) tokom kompajliranja ne pravi se problem*. Tek kada pokušam da ga kompajliram u Win okruženju (moram u win okruženju da kompajliram!) javlja mi gorepomenutu grešku.

Mislim da je problem u sledećoj rutini:

Code:
int getop(char s[])  //<- JAVLJA MI ZA OVAJ RED GREŠKU verovatno misli na char s[]
{
    #define PERIOD  '.'
    int i = 0;
    int c;
    int next;

    /* Skip whitespace */
    while((s[0] = c = getch()) == ' ' || c == '\t')
        ;
    //s[1] = ' ';
    s[1] = '\0';

    if(!isdigit(c) && c != PERIOD && c != '-')
        return c;

    if(c == '-')
    {
        next = getch();
        if(!isdigit(next) && next != PERIOD)
        {
           return c;
        }
        c = next;
    }
    else
    {
        c = getch();
    }

    while(isdigit(s[++i] = c))
            c = getch();
    if(c == PERIOD)                     /* Collect fraction part. */
        while(isdigit(s[++i] = c = getch()))
                        ;
    s[++i] = '\0';
    if(c != '\0')
        ungetch(c);
    return NUMBER;
}


Ona se u glavnom programu poziva ovako:

Code:
while ((type = getop(s)) != EOF )


Promenljiva u pitanju je definisana u glavnom programu kao char s[20];

*Samo da napomenem da menjam odgovarajuće #include naredbe kada kompajliram u Win okruženju.

Moje pitanje glasi: Da li moram da promenim način na koji definišem promenljivu s kako bi mogla da bude promenljive dužine i ako imate savet kako to da uradim?

Pozdrav,

Mix.
 
Odgovor na temu

pajaja
Beograd

Administrator
Član broj: 41598
Poruke: 3430
*.dynamic.sbb.rs.

Jabber: pajaja@elitesecurity.org
ICQ: 253317269


+144 Profil

icon Re: Ansi C i niz promenljive dužine - problem oko kompajliranja.22.05.2012. u 22:12 - pre 145 meseci
Ovo sto si napisao bi trebalo da radi posto se niz prosledjuje kao pointer na prvi element, ali da li si probao da kao argument funkcije stavis recimo char *s pa da vidis da li ce da prodje?
xxx
mali mali mali kamičak...nebo plave boje.
In Memoriam: Madzone Zeka(15.09.2005-16.09.2005)
 
Odgovor na temu

Mixxit
student

Član broj: 303319
Poruke: 3
*.dynamic.isp.telekom.rs.



Profil

icon Re: Ansi C i niz promenljive dužine - problem oko kompajliranja.23.05.2012. u 12:53 - pre 145 meseci
Probao sam sa pointerom na nekoliko načina (sve što mi je padalo na pamet oko njih) i opet mi prijavljuje istu grešku.

Da li bi trebao da probam da radim sa malloc() rutinom? (i kako?)

Ponestaje mi ideja šta bi moglo da bude...

Pozdrav.

 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.static.sbb.rs.



+395 Profil

icon Re: Ansi C i niz promenljive dužine - problem oko kompajliranja.23.05.2012. u 13:16 - pre 145 meseci
Ne bi trebalo nikako da ti prijavljuje istu gresku na istom mestu .Pogledaj malo bolje ..
Ono sto ti je @pajaja predlozio je jedino ispravno resenje. Mozes i sa dinamickim alociranim nizom potpis metode ostaje isti
Code:

int getop(char* s)  
{
..
..
}

// negde u kodu : 
char s [20]; 
int ret = getop(s) ;




Viva lollapalooza
 
Odgovor na temu

Mixxit
student

Član broj: 303319
Poruke: 3
*.dynamic.isp.telekom.rs.



Profil

icon Re: Ansi C i niz promenljive dužine - problem oko kompajliranja.26.05.2012. u 15:58 - pre 145 meseci
Uspeo sam da sa definisanjem char* s u getop() rutini kompajliram program (+ još nekog dodatnog podešavanja).

Hvala svima na pomoći!

Pozdrav.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Ansi C i niz promenljive dužine - problem oko kompajliranja.

[ Pregleda: 1110 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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