使用malloc()进行多个输入?

时间:2012-11-23 11:25:22

标签: c malloc dynamic-arrays calloc dynamic-allocation

好吧我知道malloccalloc可用于动态分配,但作为CI的新手不知道如何使用我分配用于输入多个输入的内存,如TC ++示例我们有这个代码

#include <stdio.h>
#include <string.h>
#include <alloc.h>
#include <process.h>

int main(void)
{
   char *str;

   /* allocate memory for string */
   if ((str = (char *) malloc(10)) == NULL)
   {
      printf("Not enough memory to allocate buffer\n");
      exit(1);  /* terminate program if out of memory */
   }

   /* copy "Hello" into string */
   strcpy(str, "Hello");
    /* display string */
    printf("String is %s\n", str);
    /* free memory */
   free(str);

   return 0;
}

在这样的代码中,我们将Hello放到我们现在分配的内存中,这应该给我们留下4个字符空间,我们应该做些什么来向这些空间添加数据。

当用户被问及输入数量时,我想实现这个想法,他说10或100然后程序输入数据并存储它们并将数据打印到屏幕上。

2 个答案:

答案 0 :(得分:1)

您正在寻找“指针算术” 在本例中,您将分配10个字节的内存,并将第一个字节的地址存储在指针str中。
然后将字符串"hello"复制到此内存中,这样就可以使用4个字节(因为"hello"是5个字节+字符串终止字符\0的一个字节)。
如果要在剩余的4个字节中存储某些内容,可以使用指针算法计算内存地址。 例如,如果要访问str中的第6个字节,则执行str+5。简单。
因此,为了扩展您的示例,您可以执行以下操作:

strcpy(str, "Hello");
strcpy(str+5, " man");

printf("String is %s\n", str);的输出为"Hello man"

答案 1 :(得分:0)

如果您想要附加到malloc ed字符串,请使用strcat

str = malloc(20);
...
/* copy "Hello" into string */
strcpy(str, "Hello");
strcat(str, ", world!");
/* display string */
printf("String is %s\n", str); /* will print 'Hello, world!' */