关于指针的未知错误,segmentation fault
用栈实现了一个符号配对检测的算法程序代码:
/** *check if the following punctuations are balanced: *(),[],{} */ #include<stdio.h> #define MAX 50 int isMatch(char c1,char c2){ return (c1=='('&&c2==')')|| (c1=='['&&c2==']')|| (c1=='{'&&c2=='}'); } int isBalance(char* str){ int i=0; char stack[MAX]; int top=-1; while(str[i]!='\0'){ if(str[i]=='('||str[i]=='['||str[i]=='{'){ stack[++top]=str[i]; }else if(str[i]==')'||str[i]==']'||str[i]=='}'){ if(top==-1){ return -1; //ERROR }else if(!isMatch(stack[top--],str[i])){ return -1; } } ++i; } return top==-1?0:-1; } int main(){ char* str=NULL; scanf("%s",str); //用以上两句读入的字符串,程序不能正确运行,显示:segmentation fault //若改为使用确定的值,如char* str="(1+2)",程序正确运行 printf("is balanced?: %d\n",isBalance(str)); return 0; }问题是,在main函数中
char* str=NULL; scanf("%s",str);用以上两句读入的字符串,程序不能正确运行,显示:segmentation fault
若改为使用确定的值,如char* str="(1+2)",程序正确运行