C级强分段故障



我一直很难让这段代码工作。我试图得到一个字符数组被复制,所以我可以得到多少令牌的计数有动态分配和保存它们被检查的环境变量。然而,当它试图加强原始字符串时,我一直在分割。

    void echo(char *str1)
    {
      char *token, *temp;
      char *saveptr1;
      int j, i, k, counter;
      char *copy;
      strncpy(copy, str1, 80);
      const char *delim = " ";
      i = strlen(copy);
      for(j = 0; j < i; j++, copy = NULL)
      {
         token = strtok_r(copy, delim, &saveptr1);
         counter++;
         if(token == NULL)
         {
           counter--;
           break;
         }
      }
      // initialize token array for echo
      char *tokAr[counter];
      for(j = 0; j < counter; j++)
        tokAr[j] = malloc(80*sizeof(char));
      for(j = 0, k = 0; j < i; j++, str1 = NULL)
      {
         tokAr[k] = strtok_r(str1, delim, &saveptr1);
         if( tokAr[k] != NULL)
         {
            if(strchr(tokAr[k], 36) != NULL)
            {
              temp = enviro(tokAr[k]);
              printf("%s ", temp);
            }
         else
           printf("%s ", tokAr[k]);
         }
         else
           break;
      }
      for(k = 0; k < counter; k++)
        free(tokAr[k]);
    }
    char* enviro(char *ret)
    {
      char *copy, *expand, *saveptr;
      const char *delim = "$";
      strcpy(copy, ret);
      expand = strtok_r(copy, delim, &saveptr);
      return getenv(expand);
    }

我知道它与我如何复制传入的str1字符数组有关,但我无法从gdb中找出它。如有任何帮助,不胜感激

您没有为copy分配内存。

char *copy;
strncpy(copy, str1, 80);

如果您不需要完整的81个字符,请尝试mallocstrdup

copy = malloc(81);
strncpy(copy, str1, 80);
/* Or strdup. */
copy = strdup(str1);

copy不包含有效的分配地址。在使用copy之前,请先用malloc分配足够的内存。另外,请记住在使用完copy后释放它,以防止大型程序中的内存泄漏。

我认为在函数echo中,您没有初始化变量counter并尝试对其进行递增和递减。试着去做。

相关内容

  • 没有找到相关文章

最新更新