例如,我想知道是否有任何顯著差或好/壞的做法有什麼區別,直接在函數上傳遞sizeof(),以及之前聲明和初始化的變量?
這樣做是這樣的:
unsigned int length_addr;
length_addr = sizeof(cli_addr);
nbytes = recvfrom(sockfd, buffer, sizeof(buffer), 0,
(struct sockaddr *)&cli_addr, &length_addr);
和這樣:
nbytes = recvfrom(sockfd, buffer, sizeof(buffer), 0,
(struct sockaddr *)&cli_addr, sizeof(cli_addr));
你什麼時候說「兩者都不正確」,他們100%不正確?爲什麼第一個不正確?我傳遞一個unsigned int的引用。參數socklen_t *不能是一個unsigned int嗎? –
@jorgesaraiva,'socklen_t'是強烈依賴於體系結構大小的類型之一...因爲它們可以作爲'signed int'(允許負值,錯誤值)實現爲'unsigned int'(以允許較大的值)和'unsigned long int'(例如,在64位體系結構中,一個64位整數)以允許巨大的值。你最好使用適當的類型,因爲它們在那裏是爲了方便。而且更重要的是,如果你必須投入指針來輸入,而不是值。這是一個常見的錯誤,導致許多未被發現的錯誤,很難追查。 –