【问题标题】:C Segmentation Fault using Strcmp使用Strcmp的C分段错误
【发布时间】:2013-08-24 13:51:51
【问题描述】:

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

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

【问题讨论】:

  • strcmp 接受两个字符串。两个字符可以正常比较。
  • 如果您 a) 阅读手册页 b) 打开编译器的所有警告,例如gcc -Wall c) 注意这些警告
  • 注意:while (x < (int)(strlen(test_string)-1)){ 是次优的(而且丑陋的)

标签: c segmentation-fault


【解决方案1】:

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

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

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

if(test_string[x] != '[')
    ...

【讨论】:

    【解决方案2】:

    我看到的问题是

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

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

    3) 处理右括号时,您只是匹配先前的索引 (i-1)。现在以下序列将产生一个问题 []]] 在前两个括号之后,您的 i 变为 0,之后您将尝试访问括号 [-1],这是数组超出范围的问题,可能导致段错误。

    【讨论】:

      猜你喜欢
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多