[ Mixxit @ 22.05.2012. 20:10 ] @
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.
[ pajaja @ 22.05.2012. 22:12 ] @
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?
[ Mixxit @ 23.05.2012. 12:53 ] @
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.

[ deerbeer @ 23.05.2012. 13:16 ] @
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) ;



[ Mixxit @ 26.05.2012. 15:58 ] @
Uspeo sam da sa definisanjem char* s u getop() rutini kompajliram program (+ još nekog dodatnog podešavanja).

Hvala svima na pomoći!

Pozdrav.