簡體   English   中英

在C中使用rand()

[英]Using rand() in C

我正在使用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);
}

您需要rand函數。 使用srand(time(NULL))進行播種。 同時刪除i++; 您的for循環正文中的聲明。

這里的錯誤是,在打印生成的並存儲在數組前一位置的隨機值之前,您正在遞增迭代變量i。 每次調用printf都會看到204的原因是因為printf正在打印一個未初始化的整數,而該整數在編譯器上恰好是204。如果要在for循環之前將sendbuf數組設置為零,則您會看到printf每次打印都會輸出零。時間。

這是sendbuf數組包含在當前代碼中的內容:

[0] =隨機值[1] =未初始化值<-printf在for循環的第一次迭代中打印此結果[2] =隨機值[3] =未初始化值<-printf在for循環的第二次迭代中打印此結果...

為了解決此問題,請從for循環體內刪除i ++。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM