Массив, которому не назначается символ после определенного числа циклов

Я нахожусь в процессе написания функции инфикса в постфикс. После нескольких циклов (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 Индекс в массиве не будет выходить за пределы доступа.

Другие вопросы по тегам