gpt4 book ai didi

c - 在一定次数的循环后,数组未分配 char

转载 作者:行者123 更新时间:2023-11-30 19:44:12 25 4
gpt4 key购买 nike

我正在编写一个中缀到后缀函数。循环几次(第 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 - *

但没有给出错误代码或任何内容。

如果您想要一些其他功能(即优先级、推送、弹出),请随时询问。

最佳答案

里面for loop() , strlen(infix)值未定义。因为您要替换字符串中的终止 NULL 字符。 infix[strlen(infix)]=')';导致 strlen()返回未定义的值。

所以改变

 infix[strlen(infix)]=')';

 int len = strlen(infix);
infix[len]=')';
infix[len+1] = '\0';

还要确保为数组分配了足够的内存,以便 len+1数组中的索引不会越界访问。

关于c - 在一定次数的循环后,数组未分配 char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28539470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com