gpt4 book ai didi

c - 尝试将字符附加到 C 中的字符串时,xCode 上的 EXC_BAD_ACCESS 代码 2

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

我试图将一个字符附加到 C 中的字符串,但它不断在我正在使用的函数中抛出 EXC_BAD_ACCESS code 2 错误

void append(char s[], char c)
{
char str[strlen(s)+1];
strcpy (str,s);
char x[2];
x[0]=c;x[1]='\0';
strcat(s, x);
}

调用函数,如您所见,它用于从中缀方程创建后缀方程

const char * postFix(char x[]){
PtrToNode P = malloc(sizeof(struct Node));
P->Next=NULL;
char* m="";
char open='(',close=')';
for (int i=0;i<strlen(x);i++){
if (x[i]!='+'&&x[i]!='-'&&x[i]!='*'&&x[i]!='/'&&x[i]!='%'&&x[i]!='('&&x[i]!=')'){
if (x[i+1]!='+'&&x[i+1]!='-'&&x[i+1]!='*'&&x[i+1]!='/'&&x[i+1]!='%'&&x[i+1]!='('&&x[i+1]!=')'){
append(m, open);
append(m, x[i]);
append(m, x[i+1]);
append(m, close);
}
else
append(m, x[i]);
}
else {
if (x[i]=='(')
Push(x[i], P);
else if (x[i]==')'){
PtrToNode PTN= P->Next;
char ch=Pop(P);
while (ch!='(') {
append(m,PTN->Element);
ch=Pop(P);
}
}
else {
char peak=Peak(P);
if (peak=='+'||peak=='-'){
if (x[i]=='*'||x[i]=='/'||x[i]=='%'){
Push(x[i], P);
}
else {
char whatever = Pop(P);
Push(x[i], P);
append(m,whatever);
}
}
else {
if (peak=='*'||peak=='/'||peak=='%'){
char whatever = Pop(P);
append(m,whatever);
Push(x[i], P);
}
}
}
}
}
printf("%s",m);
return m;
}

最佳答案

或者:

A) s 所指的内容不可修改,或者B) s 不够大,无法容纳 strlen(s) + 2 个字符

编辑:你发布了你的代码,答案是......两者都有,但 A 更紧迫。

char* m=""; 
/* ... */
append(m, open);

m 是不可修改的字符串。任何修改以这种方式分配的字符串文字的尝试都会导致未定义的行为。即使它是可修改的,它也不够大,无法在不重新分配的情况下连接另一个字符。

如果您想更改 m 所指的内容,请像这样分配它:

char m[size];

char *m = malloc(size);

此外,您需要预先为尽可能大的连接字符串分配足够的空间,或者在调用 append 之前分配更多内存。

顺便说一句,append 中的 str 未使用且完全没有必要。

关于c - 尝试将字符附加到 C 中的字符串时,xCode 上的 EXC_BAD_ACCESS 代码 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15957704/

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