【问题标题】:Why function is generating negative numbers?为什么函数会生成负数?
【发布时间】:2016-06-30 02:52:11
【问题描述】:

我有一个函数可以生成 0-255 之间的数字,但它也会生成负值。请给点建议。

char* generateRandomNumbers()
{
    static unsigned char random[9];
    srand(0);
    static int i = 0;
    for(;i<9;i++)
    {
        random[i] = rand() % (256);
    }

    return (char*)random;
}

打印数字:

char* random = generateRandomNumbers();
for (int i = 0; i < 9; i++) {
    printf("%d\n", random[i]);}

【问题讨论】:

  • 当你提到“你的 rand()”时,你指的是 rand() 还是 generateRandomNumbers() ?
  • 为什么i 是静态的?为什么random[] 是静态的?当您要求随机数时,为什么要返回char *?您是否阅读过如何将位解释为有符号或无符号数字?为什么不let rand() 生成您的号码,而不是使用char 的数组?
  • 您将它们存储在unsigned chars....它们不能在那里是负数。你是如何打印它们的?
  • 问题:如果generateRandomNumbers 被调用两次会发生什么?
  • 旁注:never use rand() for anything related to cryptography... 随机生成器正在改进,但在 Unix 平台上使用 /dev/urandom 可能是您的最佳选择

标签: c arrays random


【解决方案1】:

rand() 也产生负值

不,不是。 描述您实际观察到的行为。您没有观察到 rand 返回负数。您观察到,当将 char 打印为数字时,您会得到一个负数。

所以你应该问的问题是:

为什么我的字符打印为负数?

因为char 在您的 C 版本中进行了符号扩展。

【讨论】:

  • 操作使用%d而不是%u来打印字符。有关打印有符号和无符号整数值的信息,请参阅 here。
  • 感谢 Eric,未签名和已签名的新手。所以我在函数中将 char 设为 0 -255。谢谢
  • 你的答案在哪里?
  • @Mayank 很抱歉,他的回答虽然有点含糊,但却是正确的。我误解了他在说什么,对不起。
  • @Jens %d 或 %u 是否使用 unsigned char 无关紧要...签名 int 是一个更广泛的类型,仍然可以代表所有 unsigned char 的值。
猜你喜欢
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多