变量乱变问题(已解决)
环境:AMD,win10_x64,cygwin64,vscode,code runner
与预期不符的代码:

#include<string.h> #include"stdio.h" typedef char ElemType; typedef struct BiTNode { ElemType data; struct BTNode *lchild; struct BTNode *rchild; } BTNode, *BiTree; BTNode*CreateBiTree(char *str) { // char str[]="A(B(D,E(H(J,E(L,M(,N)))),C(F,G(,I)))",arr[]=""; // const char*str=b; // char*str=b; char*str2; int head=strchr(str,'(')-str+1,tail; // int head=1,tail=35; // for (int i = (int)(strchr(str2,'(')-str2);; i--,str2--) // printf("strlen(str)=%d\n",strlen(str)); str2=str+strlen(str)-1; for (int i = strlen(str)-1;; i--,str2--) { // printf("i=%d,*str2=%c\n",i,*str2); if(*str2==')'){ tail=i; printf("tail=%d,i=%d\n",tail,i); break; } } // printf("%d(tail)-%d(head)+1-2=%d\n",tail,head,tail-head+1-2); str2=str+head; char arr[]=""; char*str3=arr; for (int i = 0; i < tail-head+1; i++,str2++,str3++){ *str3=*str2; printf("i=%d, tail=%d, head=%d\n",i,tail,head); // printf("%c ",*str3); } printf("tail=%d head=%d\n",tail,head); *str3='\0'; str3=arr; printf("\n%s\n",str3); return 0; } int main() { BTNode *b = NULL, *p, *lchild = NULL, *rchild = NULL; b=CreateBiTree("A(B(D,E(H(J,E(L,M(,N)))),C(F,G(,I)))"); return 0; }
运行结果:
修改符合预期的代码:

#include<string.h> #include"stdio.h" typedef char ElemType; typedef struct BiTNode { ElemType data; struct BTNode *lchild; struct BTNode *rchild; } BTNode, *BiTree; int main() { BTNode *b = NULL, *p, *lchild = NULL, *rchild = NULL; // b=CreateBiTree("A(B(D,E(H(J,E(L,M(,N)))),C(F,G(,I)))"); char args[]="A(B(D,E(H(J,E(L,M(,N)))),C(F,G(,I)))"; char*str=args; char*str2; int head=strchr(str,'(')-str+1,tail; // int head=1,tail=35; // for (int i = (int)(strchr(str2,'(')-str2);; i--,str2--) // printf("strlen(str)=%d\n",strlen(str)); str2=str+strlen(str)-1; for (int i = strlen(str)-1;; i--,str2--) { // printf("i=%d,*str2=%c\n",i,*str2); if(*str2==')'){ tail=i; printf("tail=%d,i=%d\n",tail,i); break; } } // printf("%d(tail)-%d(head)+1-2=%d\n",tail,head,tail-head+1-2); str2=str+head; char arr[]=""; char*str3=arr; for (int i = 0; i < tail-head+1; i++,str2++,str3++){ *str3=*str2; printf("i=%d, tail=%d, head=%d\n",i,tail,head); // printf("%c ",*str3); } printf("tail=%d head=%d\n",tail,head); *str3='\0'; str3=arr; printf("\n%s\n",str3); return 0; }
解决思路:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!