【问题标题】:Create buffer and fill it with random numbers创建缓冲区并用随机数填充它
【发布时间】:2014-05-13 12:37:41
【问题描述】:

我想创建一个缓冲区,然后在其中写入随机数据。

这是我目前得到的结果

uint8_t size = 10;
int* buffer = malloc (size*sizeof(uint8_t));
int i;
for (i=0; i<size; i++)
{
buffer[i]=(rand()%100)+1;
}
printf("Content of buffer = %d\n", buffer);

结果是 wandom yes 但只有 8 个数字而不是 10 个。

我想得到一个缓冲区,里面有大小和随机数的内容。

提前致谢

【问题讨论】:

  • for循环中写入printf("Content of buffer = %d\n", buffer[i]);

标签: c random buffer


【解决方案1】:

你需要

malloc (size*sizeof(int))

而不是

malloc (size*sizeof(uint8_t))

也许你需要

uint8_t* buffer = malloc (size*sizeof(uint8_t));

这取决于您是否需要 10 个 int 的缓冲区或 10 个 uint8_t 的缓冲区。

要打印缓冲区的内容,请使用:

for (i = 0; i < size; i++)
{
  printf("%d\n", buffer[i]) ;
}

下一行只打印缓冲区的地址

printf("Content of buffer = %d\n", buffer);

【讨论】:

  • @raddirad:如果这是您问题的答案,您应该点击答案顶部的绿色复选标记。
  • @Michael Walz,完成 :)
【解决方案2】:

如果您想要一个随机数据分配的任意大小的缓冲区,您可能希望使用当前时间为您的随机数生成器播种,然后反复调用random()

#include <time.h>
#include <stdlib.h>

char *allocate_random_heap_buffer(size_t size) {
    time_t current_time = time(NULL);
    srandom((unsigned int) current_time);
    char* allocatedMemory = (char *) malloc(size);

    for (int bufferIndex = 0; bufferIndex < size; bufferIndex++) {
        uint8_t randomNumber = (uint8_t) random();
        allocatedMemory[bufferIndex] = randomNumber;
    }

    return allocatedMemory;
}

【讨论】:

  • 它不是纯 C。我不是某种混合 C 和 C++ (
  • @DennisV.R.: 是的,如果你使用Ctime.h 这样的头文件,你可以为C 编译它。由于这是一个用C 标记的问题,我更新了我的答案。
  • 这段代码仍然是 C++。在纯 C 中没有 nullptr 的概念。请使用 NULL。不要将 char 用作一个字节。正确的方法——使用类型 uint8_t 和适当的头文件和 malloc 的 sizeof(uint8_t)
猜你喜欢
  • 2019-07-31
  • 1970-01-01
  • 2016-01-08
  • 2019-06-25
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多