gpt4 book ai didi

c - 为什么取消注释此行会导致段错误?

转载 作者:行者123 更新时间:2023-12-01 12:29:32 27 4
gpt4 key购买 nike

<分区>

出于某种原因,取消最后一行的注释会导致段错误。我不知道为什么会这样,因为它只是在创建一个新字符串。代码是:

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);
}

提前致谢。

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