2

我正在编写一个程序来检查 C 中不同类型的括号是否匹配,我是 C 新手,所以我知道分段错误与内存有关,但不确定如何解决我的问题?

预期的输出将是有人会输入 test_string,例如,这将是成功的,而这样做会打印失败。
谢谢

4

2 回答 2

1

您的代码的问题很可能是由编译器的警告确定的:您应该看到很多警告,告诉您正在将 a 传递char给期望 a 的函数char*

strcmp函数需要 C 字符串,而不仅仅是char*,这意味着在字符串的最后一个字符之后应该有一个空终止符。这就是为什么即使您将指针传递给单个字符也会失败。

如果您想比较单个字符,您只需要一个简单的==

if(test_string[x] != '[')
    ...
于 2013-08-24T13:57:30.080 回答
1

我看到的问题是

1)您正在使用 strcmp 但将字符串与 char 进行比较。

2)你的括号数组是 20 字符宽。如果您连续超过 20 个左括号,则会导致段错误。

3) 在处理右括号时,您只是与之前的索引 (i-1) 匹配。现在以下序列将创建一个问题 []]] 在前两个括号之后,您的 i 变为 0,之后您将尝试访问括号 [-1],这是数组越界问题,可能导致 seg 错误。

于 2013-08-24T14:03:06.110 回答