gepeppe
09-11-2007, 23:30
salve a tutti m devo sviluppare uno stack statico con array, in cui ogni elemento contiene una stringa, quindi uso un array di puntatori a char. Solo che ogni volta che tolgo un elemento sembra che contanga na stringa indefinita. Vi posto lo stack:
#define MAX 1000
#define EMPTY -1
#define FULL (MAX - 1)
/*questo è lo stack con l'array di "stringhe"*/
typedef struct stack{
char *s[MAX];
int top;
} stack;
/*funzioni*/
void reset(stack *stk)
{
stk -> top = EMPTY;
}
void push(char *string, stack *stk)
{
int TOP;
TOP = stk -> top++;
stk -> s[TOP] = calloc(8, sizeof(char));
strcpy(stk -> s[TOP], string);
}
char *pop(stack *stk)
{
return (stk -> s[stk -> top--]);
}
char *top(stack *stk)
{
return (stk -> s[stk -> top]);
}
int empty(stack *stk)
{
/*restituisce 1 se vuoto*/
return (stk -> top == EMPTY);
}
int full(stack *stk)
{
/*restituisce 1 se è pieno*/
return (stk -> top == FULL);
}
Se ora eseguo questa piccola parte di codice mi da errore:
stack stk;
char temp[8];
reset(&stk);
push("casa", &stk);
push("mare", &stk);
/*non voglio perdere il valore tolto*/
strcpy(temp, pop(&stk));
printf("%s\n", temp);
printf("%s\n", pop(&stk));
#define MAX 1000
#define EMPTY -1
#define FULL (MAX - 1)
/*questo è lo stack con l'array di "stringhe"*/
typedef struct stack{
char *s[MAX];
int top;
} stack;
/*funzioni*/
void reset(stack *stk)
{
stk -> top = EMPTY;
}
void push(char *string, stack *stk)
{
int TOP;
TOP = stk -> top++;
stk -> s[TOP] = calloc(8, sizeof(char));
strcpy(stk -> s[TOP], string);
}
char *pop(stack *stk)
{
return (stk -> s[stk -> top--]);
}
char *top(stack *stk)
{
return (stk -> s[stk -> top]);
}
int empty(stack *stk)
{
/*restituisce 1 se vuoto*/
return (stk -> top == EMPTY);
}
int full(stack *stk)
{
/*restituisce 1 se è pieno*/
return (stk -> top == FULL);
}
Se ora eseguo questa piccola parte di codice mi da errore:
stack stk;
char temp[8];
reset(&stk);
push("casa", &stk);
push("mare", &stk);
/*non voglio perdere il valore tolto*/
strcpy(temp, pop(&stk));
printf("%s\n", temp);
printf("%s\n", pop(&stk));