Массив, которому не назначается символ после определенного числа циклов
Я нахожусь в процессе написания функции инфикса в постфикс. После нескольких циклов (8 или 9-й цикл) мой постфиксный массив больше не будет принимать символы (он установлен на 100).
void convertToPost(char infix[], char postfix[])
{
StackNode *pMem=NULL;
int i=-1,j=0, priority=0,priorityStack=0,operandCounter=0;
push(&pMem,'(');
infix[strlen(infix)]=')';
printf("%s\n",infix);
for(j=0;j<strlen(infix);j++)
{
putchar('\n');
printf("infix[%d]: %s\n",j,infix);
printf("postfix[%d]: %s\n",j,postfix);
putchar('\n');
if(infix[j] <= 57 && infix[j] >= 48)
{
i++;
postfix[i]=infix[j]; // not assigning value 8 to postfix
i++;
postfix[i] = ' ';
}
else if(infix[j] == '(')
{
push(&pMem,infix[j]);
//pop(&pMem);
}
else if(infix[j] == ')')
{
while(pMem->pNext != NULL)
{
if(pMem->pString == '(')
{
pop(&pMem);
}
else
{
postfix[i]= ' ';
i++;
postfix[i] = pMem->pString;
i++;
pop(&pMem);
}// figure out how to take char from top of stack and put in postfix something pop()
//push(&pMem,'(');
}
push(&pMem,'(');
//pop(&pMem);
}
else if(infix[j] == '+' || infix[j] == '-' || infix[j] == '^' || infix[j] == '*' || infix[j] == '/' || infix[j] == '%')
{
//i--;
if(operandCounter==0)
{
push(&pMem,infix[j]);
operandCounter++;
}
else
{
priority=Precedence(infix[j]);
priorityStack=Precedence(pMem->pString);//pString is empty
if(priority >= priorityStack)
{
if(pMem->pString != '(')
{
i++;
postfix[i]=pMem->pString;
i++;
postfix[i]=' ';
pop(&pMem);
push(&pMem,infix[j]);
}
else
{
push(&pMem,infix[j]);
}
}
}
}
}
}
Это примерное уравнение, которое я использую: 9*(5-4)+2/6 Его вывод должен быть: (9 5 4 - * 2 6 / +)
Я положил комментарий, где проблема возникает в первую очередь. Это продолжается повсюду после достижения этой точки. Например, когда я запускаю код, он возвращает: 9 5 4 - *
Но не дает никаких кодов ошибок или что-нибудь.
Если вам нужны другие функции (например, приоритет, push, pop), не стесняйтесь спрашивать.
1 ответ
Внутри for loop()
, strlen(infix)
значение не определено. Потому что вы заменяете завершающий символ NULL в строке.infix[strlen(infix)]=')';
Что приводит к strlen()
вернуть неопределенное значение.
так измени
infix[strlen(infix)]=')';
в
int len = strlen(infix);
infix[len]=')';
infix[len+1] = '\0';
Также убедитесь, что у вас достаточно памяти для массива, чтобы len+1
Индекс в массиве не будет выходить за пределы доступа.