出于某种原因,取消注释最后一行会导致分段错误 . 我不知道为什么会发生这种情况,因为它只是创建一个新的字符串 . 代码是:
char str[] = "()";
if (isBalanced(str))
printf("%s is balanced\n", str);
else printf("%s is not balanced\n", str);
char str1[] = "((1()";
if (isBalanced(str1))
printf("%s is balanced\n", str1);
else printf("%s is not balanced\n", str1);
//char str2[] = "((1){()})";
没有错误,程序按预期运行,但是一旦取消注释最后一行,就会在任何打印语句打印之前发生分段错误 .
我发现将str2 []更改为hi []可以解决问题,但为什么会这样呢? stdio.h没有定义任何干扰这里的宏,并且str2不是C中的关键字 . 如果我忽略了一些愚蠢的东西,请告诉我 .
这是完整的计划 .
#include <stdio.h>
int isBalanced(char *str) {
int x = 0;
int length;
while (str[x++] != '\0') length++;
char open[50];
unsigned int numOpen = 0;
for (x = 0; x < length; x++) {
if (str[x] == '{')
open[numOpen++] = str[x];
if (str[x] == '(')
open[numOpen++] = str[x];
if (str[x] == '[')
open[numOpen++] = str[x];
if (str[x] == '}') {
if (open[numOpen-1] != '{')
return 0;
else numOpen--;
}
if (str[x] == ')') {
if (open[numOpen-1] != '(')
return 0;
else numOpen--;
}
if (str[x] == ']') {
if (open[numOpen-1] != '[')
return 0;
else numOpen--;
}
}
return numOpen == 0;
}
int main() {
char str[] = "()";
if (isBalanced(str))
printf("%s is balanced\n", str);
else printf("%s is not balanced\n", str);
char str1[] = "((1()";
if (isBalanced(str1))
printf("%s is balanced\n", str1);
else printf("%s is not balanced\n", str1);
char str2[] = "((1){()})";
//if (isBalanced(str1))
// printf("%s is balanced\n", string);
//else printf("%s is not balanced\n", string);
}
提前致谢 .
1 回答
是的,你是 . 您正在使用未初始化的变量 . 这导致了不确定的行为 . 更改
至
在
isBalanced
.