【问题标题】:Using rand() in C在 C 中使用 rand()
【发布时间】:2014-01-12 16:19:02
【问题描述】:

我正在使用 TCP 服务器中的 rand() 函数发送数据类型为 uint8_t 的大型一维随机值数组,但数据类型可能是一个问题,因为我在 TCP 客户端没有收到任何内容.控制台还向我显示,即使我使用的是 rand() 函数,代码每次都会生成相同的“204”值。

#define DEFAULT_BUFLEN 19200

int main(int argc , char *argv[])
{
WSADATA wsa;
SOCKET server_socket, client_socket;
struct sockaddr_in server_addr, client_addr;
int c, iResult;
char sendbuf [DEFAULT_BUFLEN];
int sendbuflen = DEFAULT_BUFLEN;
uint8_t* p;
int i;


// Send uint8_t data to client
p = (uint8_t*)sendbuf;

for (i = 0; i < 19200; i++)
{
  p[i] = rand() % 256; //range 0-255 */
  i++;
  printf("%d\n", p[i]);
}
return 0;

iResult = send(client_socket, sendbuf, sendbuflen, 0);
}

【问题讨论】:

  • 你在循环中增加了i两次
  • 您需要先致电srand
  • 还有你return,然后再打电话给send

标签: c


【解决方案1】:

您需要为您的 rand 函数播种。使用srand(time(NULL)) 播种。还要从 for 循环体中删除 i++; 语句。

【讨论】:

    【解决方案2】:

    这里的错误是,在打印生成并存储在数组前面位置的随机值之前,您正在递增迭代变量 i。每次调用 printf 时都会看到 204 的原因是因为 printf 正在打印一个未初始化的整数,在您的编译器上恰好是 204。如果您在 for 循环之前将 sendbuf 数组 memset 为零,您会看到 printf 每次都打印零时间。

    这是您的 sendbuf 数组包含在您当前代码中的内容:

    [0] = 随机值 [1] = 未初始化的值

    为了解决这个问题,从 for 循环体中删除 i++。

    【讨论】:

      猜你喜欢
      • 2014-05-01
      • 2018-04-30
      • 1970-01-01
      • 2019-01-30
      • 2020-08-25
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多