我正在编写一个程序来检查 C 中不同类型的括号是否匹配,我是 C 新手,所以我知道分段错误与内存有关,但不确定如何解决我的问题?
预期的输出将是有人会输入 test_string,例如,这将是成功的,而这样做会打印失败。
谢谢
我正在编写一个程序来检查 C 中不同类型的括号是否匹配,我是 C 新手,所以我知道分段错误与内存有关,但不确定如何解决我的问题?
预期的输出将是有人会输入 test_string,例如,这将是成功的,而这样做会打印失败。
谢谢
您的代码的问题很可能是由编译器的警告确定的:您应该看到很多警告,告诉您正在将 a 传递char
给期望 a 的函数char*
。
该strcmp
函数需要 C 字符串,而不仅仅是char*
,这意味着在字符串的最后一个字符之后应该有一个空终止符。这就是为什么即使您将指针传递给单个字符也会失败。
如果您想比较单个字符,您只需要一个简单的==
:
if(test_string[x] != '[')
...
我看到的问题是
1)您正在使用 strcmp 但将字符串与 char 进行比较。
2)你的括号数组是 20 字符宽。如果您连续超过 20 个左括号,则会导致段错误。
3) 在处理右括号时,您只是与之前的索引 (i-1) 匹配。现在以下序列将创建一个问题 []]] 在前两个括号之后,您的 i 变为 0,之后您将尝试访问括号 [-1],这是数组越界问题,可能导致 seg 错误。