[英]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.