为什么在尝试比较两个字符串时出现分段错误?

马哈茂德·萨拉(Mahmoud Salah)

我正在为一个简单的汇编程序进行分配,该汇编程序应识别诸如高级编程语言之类的任意变量名。我试图使用动态分配到char指针数组

我只是想制作一个可扩展的字符串数组,并且能够在该数组中搜索特定的字符串,但是在尝试比较两个字符串的过程中却出现了分段错误[line:14]

Comp(&buffer[1], Variables[i];
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define Comp(a,b)  strcmp(a,b) == 0 ? 1 : 0

char buffer[255], **Variables;
int VariableIndex;

void A_instructionHandler() {
    int A_Operand, test = 0;
    if (buffer[0]== '@') { 
        for (int i = 0; i <= VariableIndex; i++) {
            test = Comp(&buffer[1], Variables[i]);
            if (test) { 
                A_Operand = i + 16; 
                break;
            }   
        }   
    }   
}

int main(int argumentCounter, char *arguments[]) { 
    strcpy(buffer, "@variable");
    Variables = (char **)calloc(VariableIndex + 1, sizeof(char**));
        A_instructionHandler();
}
塔德曼

这是将代码重构为更惯用的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void instruction_handler(char* buffer, char** variables) {
  switch (buffer[0]) {
    case '@':
      // This iterates over the NULL terminated array by stopping when
      // it hits a NULL pointer, or in other words *v is false.
      for (char **v = variables; *v; ++v) {
        // If this matches a variable name...
        if (!strcmp(*v, &buffer[1])) {
          // Variable matched, so show some debugging code
          printf("Found variable: %s\n", *v);
          return;
        }
      }
  }
}

int main(int argc, char* argv[] ) {
  // Create a simple NULL-terminated array of arbitrary size
  char *variables[] = {
    "variable",
    NULL
  };

  instruction_handler("@variable", variables);
}

variables只要NULL终止符保留在最后,您就可以在哪里定义,扩展,缩小数组的位置。

根据原始代码的一些提示:

  • 除非您有非常令人信服的理由,否则不要使用全局变量。这里没有这样的原因。
  • 使您的功能明确意图和目的。
  • 选择一个命名约定并坚持下去。
  • 像这样使用C约定,strcmp()并处理它的怪异之处,不要将其包装在a中#define并发明自己的C方言,没人能理解。随着时间的流逝,您会逐渐习惯C语言,它不会给您带来太多麻烦,并且您可以在不驱使团队中其他人陷入困境的情况下进行编码。
  • 比起笨拙的变量名(尤其是非标准的变量名),argc扩展到之类的解释argumentCounter最好用注释表示。评论很棒。尽可能多地使用它们!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

比较两个字符串时,strncmp给出分段错误

来自分类Dev

比较两个字符串时出现意外的令牌错误

来自分类Dev

比较两个字符串时出现Unicode错误

来自分类Dev

在Bash中比较两个字符串时出现“找不到命令”错误

来自分类Dev

为什么通过计算字符的异或比较两个字符串?

来自分类Dev

C:比较函数中的两个字符串时出现问题

来自分类Dev

为什么用 `>` 比较两个字符串不会抛出错误?

来自分类Dev

为什么这两个字符串比较返回不同的结果?

来自分类Dev

为什么两个字符串可以比较相等?

来自分类Dev

为什么while(* s ++ == * t ++)无法比较两个字符串

来自分类Dev

为什么我可以将两个字符串与“ ==”而不是两个字符数组进行比较?

来自分类Dev

为什么在Node.js中比较两个字符串时'==='比逐字符比较慢

来自分类Dev

比较两个字符串时间

来自分类Dev

Powershell比较两个字符串

来自分类Dev

如何比较两个字符串?

来自分类Dev

命令比较两个字符串

来自分类Dev

如何比较两个字符串?

来自分类Dev

比较两个字符串 PHP

来自分类Dev

如何比较两个字符串?

来自分类Dev

比较两个字符串 [words]

来自分类Dev

尝试基于比较合并两个字符串数组

来自分类Dev

尝试比较 linq 查询中的两个字符串

来自分类Dev

我正在尝试使用“ if”和“ OR”执行两个字符串比较

来自分类Dev

比较两个字符串时出现错误“传递 'strcmp' 的参数 2 使指针来自整数而不进行强制转换”

来自分类Java

当两个字符串都可以为null时,如何比较两个字符串?

来自分类Dev

比较if条件产生意外错误的两个字符串C#

来自分类Java

如何比较两个字符串的值相等,最好的方法是什么?

来自分类Dev

当您在python中比较两个字符串时会发生什么

来自分类Dev

比较两个字符串时vba类型不兼容

Related 相关文章

  1. 1

    比较两个字符串时,strncmp给出分段错误

  2. 2

    比较两个字符串时出现意外的令牌错误

  3. 3

    比较两个字符串时出现Unicode错误

  4. 4

    在Bash中比较两个字符串时出现“找不到命令”错误

  5. 5

    为什么通过计算字符的异或比较两个字符串?

  6. 6

    C:比较函数中的两个字符串时出现问题

  7. 7

    为什么用 `>` 比较两个字符串不会抛出错误?

  8. 8

    为什么这两个字符串比较返回不同的结果?

  9. 9

    为什么两个字符串可以比较相等?

  10. 10

    为什么while(* s ++ == * t ++)无法比较两个字符串

  11. 11

    为什么我可以将两个字符串与“ ==”而不是两个字符数组进行比较?

  12. 12

    为什么在Node.js中比较两个字符串时'==='比逐字符比较慢

  13. 13

    比较两个字符串时间

  14. 14

    Powershell比较两个字符串

  15. 15

    如何比较两个字符串?

  16. 16

    命令比较两个字符串

  17. 17

    如何比较两个字符串?

  18. 18

    比较两个字符串 PHP

  19. 19

    如何比较两个字符串?

  20. 20

    比较两个字符串 [words]

  21. 21

    尝试基于比较合并两个字符串数组

  22. 22

    尝试比较 linq 查询中的两个字符串

  23. 23

    我正在尝试使用“ if”和“ OR”执行两个字符串比较

  24. 24

    比较两个字符串时出现错误“传递 'strcmp' 的参数 2 使指针来自整数而不进行强制转换”

  25. 25

    当两个字符串都可以为null时,如何比较两个字符串?

  26. 26

    比较if条件产生意外错误的两个字符串C#

  27. 27

    如何比较两个字符串的值相等,最好的方法是什么?

  28. 28

    当您在python中比较两个字符串时会发生什么

  29. 29

    比较两个字符串时vba类型不兼容

热门标签

归档