C 使用 malloc 和 realloc 动态增加字符串长度

ben

目前正在学习 C 中的内存管理,我目前遇到了在循环迭代时增加字符串长度的问题。

我试图找出逻辑上的方法是这样的:

// return string with "X" removed


char * notX(char * string){

   result = "";

   if(for int = 0; i < strlen(string); i++){
      if (string[i] != 'X') {
         result += string[i];
      }
   }

   return result;
}

在其他语言中很简单,但在 C 中管理内存使其有点挑战性。我遇到的困难是当我使用 malloc 和 realloc 来初始化和更改我的字符串的大小时。在我目前尝试的代码中:

char * notX(char * string){

   char* res = malloc(sizeof(char*)); // allocate memory for string of size 1;
   res = ""; // attempted to initialize the string. Fairly certain this is incorrect
   char tmp[2]; // temporary string to hold value to be concatenated

   if(for int = 0; i < strlen(string); i++){
      if (string[i] != 'X') {

         res = realloc(res, sizeof(res) + sizeof(char*)); // reallocate res and increasing its size by 1 character
         tmp[0] = string[i];
         tmp[1] = '\0';
         strcat(res, tmp);

      }
   }

   return result;
}

请注意,我发现成功将结果初始化为一些大数组,例如:

char res[100];

但是,我想了解如何在不初始化具有固定大小的数组的情况下解决此问题,因为这可能会浪费内存空间或内存不足。

用户3121023

realloc需要分配的字节数。size为添加到 的每个字符递增ressize + 2用于提供正在添加的当前字符和终止零。
检查 的返回reallocNULL 表示失败。Usingtmp允许返回resifrealloc失败。

char * notX(char * string){

   char* res = NULL;//so realloc will work on first call
   char* tmp = NULL;//temp pointer during realloc
   size_t size = 0;
   size_t index = 0;

    while ( string[index]) {//not the terminating zero
        if ( string[index] != 'X') {
            if ( NULL == ( tmp = realloc(res, size + 2))) {//+ 2 for character and zero
                fprintf ( stderr, "realloc problem\n");
                if ( res) {//not NULL
                    res[size] = 0;//terminate
                }
                return res;
            }
            res = tmp;//assign realloc pointer back to res
            res[size] = string[index];
            ++size;
        }
        ++index;//next character
    }
    if ( res) {//not NULL
        res[size] = 0;//terminate
    }
   return res;
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SECCOMP:如何模拟malloc,realloc和free?

使用malloc和realloc进行动态存储的最佳方法

C ++ malloc / realloc奇怪的行为

使用strtok,malloc和realloc从字符串制作令牌数组

Malloc和Realloc不起作用(C11-CLion)

关于结构数组了解Malloc和Realloc

使用malloc在C中为字符串分配内存

C中的结构的动态数组(malloc,realloc)

C free在嵌套的malloc和realloc内部不起作用

C /使用动态malloc复制字符串,从const char * org到char ** cpy

是否可以移植malloc(),realloc()和free()的地址?

我和一个朋友一起学习C语言动态分配malloc realloc。但是有一个问题。我想到记忆套

使用malloc()和realloc()将字符串存储在数组中

使用malloc()或realloc()存储并在C中打印数据

使用malloc和realloc将字符串动态添加到char指针

如何使用realloc()在动态目标中插入字符串?

使用malloc和realloc将静态数组更改为动态数组?

malloc和realloc分段错误

在c中正确使用malloc()和free()

正式的malloc稍后使用realloc

C使用malloc和memcpy动态更改数组的大小

动态数组使用malloc和realloc?

在std :: string上使用malloc / realloc / free时出现c ++内存错误

如何在 C 中使用 malloc 和 realloc 在结构中正确分配数组?

试图理解 realloc 和 malloc 函数是如何工作的

使用 malloc'ed 字符串的 C 分段错误

malloc() 和 realloc() 函数的奇怪行为导致分段错误

使用 new 和 delete 在宏中实现 C realloc

C realloc() 无效指针错误即使使用了 malloc