小编Rog*_*ger的帖子

在Python中重现C函数指针数组

我有一个Python程序要求用户输入像shell一样,如果我检测到一些特定的关键字,我想进入一些特定的函数.

问题是,我想避免做大量的ifelse if.通常在C中为了避免这种情况,我使用了一个函数指针数组,我while用它strcmp来旅行并用来检查输入.

如果有可能的话,我想知道如何在Python中做到这一点.

c python

6
推荐指数
1
解决办法
303
查看次数

如果发现其他组不止一次,如何强制执行组

到目前为止,这是我的正则表达式:

^((([a-zA-Z0-9_\/-]+)[ ])+((\bPHONE_NUMBER\b)|(\b(IP|EMAIL)_ADDRESS\b))[ ]*[;]*[ ]*)+$
Run Code Online (Sandbox Code Playgroud)

;如果我(([a-zA-Z0-9_\/-]+)[ ])+((\bPHONE_NUMBER\b)|(\b(IP|EMAIL)_ADDRESS\b))在第一个之后找到另一个,我想至少制作一个强制性的.

/tests/phone PHONE_NUMBER ; /tests/IP IP_ADDRESS 应该匹配.

/tests/phone PHONE_NUMBER /tests/IP IP_ADDRESS 不应该匹配.

我怎样才能做到这一点?

c++ regex boost match boost-regex

5
推荐指数
1
解决办法
80
查看次数

为什么这里有无效写(Valgrind)

我正在编写一个shell.当我像这样执行它cat /dev/urandom | valgrind ./myshell来运行一些测试,看看我是否有任何段错误或其他错误时,valgrind有时告诉我,我在这行有一个Invalid Write函数my_wordcpytab[++j] = str[*i];

它不会每次都发生,但它确实发生了,我只是不明白为什么.这是我的代码:

static int      count_words(char *str, char *sep)
{
  int           quote;
  int           words;
  int           i;

  i = -1;
  if (count_quotes(str) == -1)
    return (0);
  words = 0;
  quote = 0;
  while (str[++i] != '\0')
    {
      if (str[i] == '"')
        {
          if (quote == 0)
            quote = 1;
          else
            quote = 0;
        }
      if (quote == 0
          && (is_cinside(sep, str[i]) == 0 && str[i] != '\t' …
Run Code Online (Sandbox Code Playgroud)

c valgrind

4
推荐指数
1
解决办法
138
查看次数

在引用指针实现后意外指针发生变化

我的一个指针在我尊重它之后被改变并且影响它一个值.我不明白为什么,特别是因为该函数中的代码多次运行但大部分时间都在运行.这是代码:

typedef struct          s_freeList
{
  int                   sSize;
  struct s_freeList     *next;
  struct s_freeList     *back;
  int                   *eSize;
}                       t_freeList;

void            *addNode(void *addr, size_t size)
{
  t_freeList    *freeList;

  // Working stuff
  freeList = (t_freeList *)addr;
  freeList->sSize = size * -1;
  freeList->next = ((t_freeList *)g_startAddr)->next;
  freeList->back = g_startAddr;
  ((t_freeList *)g_startAddr)->next->back = freeList;
  ((t_freeList *)g_startAddr)->next = freeList;

  // Not working stuff
  printf("addr = %p\nsize = %d\n", addr, (int)size);
  freeList->eSize = addr + size - 4;
  printf("freelist->esize = %p\n", freeList->eSize);
  *(freeList->eSize) = size * -1;
  printf("freelist->esize …
Run Code Online (Sandbox Code Playgroud)

c pointers

1
推荐指数
1
解决办法
48
查看次数

标签 统计

c ×3

boost ×1

boost-regex ×1

c++ ×1

match ×1

pointers ×1

python ×1

regex ×1

valgrind ×1