在C中使用rand()

时间:2014-01-12 16:19:03

标签: c

我使用TCP服务器中的rand()函数发送数据类型为uint8_t的大型1d生成随机值数组,但数据类型可能是个问题,因为我在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);
}

2 个答案:

答案 0 :(得分:2)

您需要为rand功能播种。使用srand(time(NULL))播种。同时从i++;循环体中删除for语句。

答案 1 :(得分:1)

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

这是您的sendbuf数组包含的当前代码:

[0] =随机值 [1] =未初始化的值&lt; - printf在for循环的第一次迭代中打印出来 [2] =随机值 [3] =未初始化的值&lt; - printf在for循环的第二次迭代中打印出来 ...

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