【发布时间】:2015-06-11 13:07:14
【问题描述】:
目前我的代码使用堆栈并将用户输入的字符串一一推送到堆栈中。但是我想让它动态化,我会 malloc/realloc 什么,我知道我遗漏了一些完全明显的东西,但我想我有隧道视野......帮助?
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
char a [MAXSIZE];
char * p = a;
int top = -1;
void push ( char n )
{
if ( top == 99)
{
printf( "stack overflow");
return;
}
top+=1;
a[top] = n;
}
/* Function to delete an element from the stack */
void pop(){
if(top == -1)
printf("Stack is Empty");
else
top-=1;
}
char *inputString(FILE* fp, size_t size){
//The size is extended by the input with the value of the provisional
char *str;
int ch;
size_t len = 0;
str = realloc(NULL, sizeof(char)*size);//size is start size
if(!str)return str;
while(EOF!=(ch=fgetc(fp)) && ch != '\n'){
str[len++]=ch;
if(len==size){
str = realloc(str, sizeof(char)*(size+=16));
if(!str)return str;
}
}
str[len++]='\0';
return realloc(str, sizeof(char)*len);
}
int balanced (char * m){
int size = sizeof(m);
int i, j;
for (i=0; i<=size; ++i){
push(m[i]);
}
}
int main(void){
char *m;
printf("input string : ");
m = inputString(stdin, 10);
printf("%s\n", m);
balanced(m);
int i;
for (i=0;i<=sizeof(a);++i){
printf("\n%c", a[i]);
}
free(m);
return 0;
}
【问题讨论】:
-
隧道视野可能是件好事。清除所有与您的问题直接无关的无关代码。做一堆
int,使用硬编码值代替用户输入,simplify。然后你可能会看到答案。或者至少减少您要求我们做的工作量。 -
本版问题与上一版问题的唯一显着变化是
for (i = 0; i <= MAXSIZE; ++i)已变为for (i = 0; i <= sizeof(a); ++i)。这几乎是同一个问题被问了两次;请不要那样做!
标签: c stack malloc push realloc