0

好吧,我知道malloc或者calloc可以用于动态分配,但是作为 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,然后程序输入数据并存储它们并将该数据打印到屏幕上。

4

2 回答 2

1

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

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

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

于 2012-11-23T11:35:33.537 回答
1

如果要附加到malloced 字符串,请使用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!' */
于 2012-11-23T12:01:59.687 回答