c - 动态向 char * 添加单词

标签 c pointers memory char scanf

我无法弄清楚如何从标准输入中读取单词并将其存储在指针中。我需要随时扩展所需的内存,以便使用所需的最小内存量。

这是我使用整数的方法,但使用字符则有点困难。

int *expand(int *source, int size)
{
  int *expansion = (int *)malloc(size * sizeof(int));
  int i;
  for (i=0; i<size-1; i++)
    {
      expansion[i] = source[i];
    }
  free(source);
  return expansion;
}


int main(int argc, char **argv) 
{
  int *input = (int *)malloc(3 * sizeof(int));
  int size = 3;//start at 3 because that's initial size
  int count = 0;//position in array
  fprintf(stdout, "Enter some numbers, and press 0 when you are done.\n");

  int *temp;

  while (1)
    {
      fscanf(stdin, "%d", temp);
      if (*temp == 0)
        {
          break;
        }
      if (count == size - 1)
        {
          size++;
          input = expand(input, size);
        }
      input[count] = *temp;
      count++;

    }

  int i;
  for (i=0; i<size - 1; i++)
    {
      if (i == size - 2)
        {
          fprintf(stderr, "%d\n", input[i]);
          break;
        }
      fprintf(stderr, "%d, ", input[i]);
    }


  free(input);

  return 0;
}

最佳答案

你知道realloc()函数吗?

realloc() 函数将处理发布的场景,而不复制任何数据。 (如果需要,realloc() 函数的内部会处理复制。

关于c - 动态向 char * 添加单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35400937/

相关文章:

c++ - 执行时间较长的 C 程序示例

将 HEX 值转换为(字符、字符串、字母和数字)

c++ - 这两种动态扩展数组的方法有什么区别?

r - 如何使用 R 在基于代理的建模中管理内存

c - 在 C 中右移带分配的数组(中止陷阱 : 6)

c - tcp 或 udp,另一个比较

c++ - 从有符号字符转换为无符号字符然后再转换回来?

c - 分配连续序列不起作用

c++ - 有没有办法将 child *返回到基地*并评估哪个 child *已返回?

c - 以良好的方式在 C 中分配和释放内存