首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >strncpy分段错误

strncpy分段错误
EN

Stack Overflow用户
提问于 2011-09-26 15:03:37
回答 3查看 3K关注 0票数 2

我在运行这段代码时遇到了麻烦。我正在尝试获取一个要复制的字符数组,这样就可以计算出有多少个令牌可以动态分配和保存,以便检查环境变量。但是,当它试图对原始字符串进行strncpy时,我一直在执行segfaulting。

代码语言:javascript
运行
复制
    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中找出原因。非常感谢您的任何帮助。

EN

回答 3

Stack Overflow用户

发布于 2011-09-26 15:04:34

您尚未为copy分配内存。

代码语言:javascript
运行
复制
char *copy;
strncpy(copy, str1, 80);

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

代码语言:javascript
运行
复制
copy = malloc(81);
strncpy(copy, str1, 80);

/* Or strdup. */
copy = strdup(str1);
票数 9
EN

Stack Overflow用户

发布于 2011-09-26 15:19:25

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

票数 2
EN

Stack Overflow用户

发布于 2011-09-26 16:52:48

我认为在echo函数中,你还没有初始化变量counter,并试图递增和递减它。试着这样做。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7551624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档