Например, я хотел бы знать, если есть какие-либо существенные различия или хорошая/плохая практикаВ чем разница, передавая непосредственно функцию 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% неверны? почему первый неверен? Im передает ссылку unsigned int. Аргумент socklen_t * не может быть беззнаковым int? –
@jorgesaraiva, 'socklen_t' является одним из типов, сильно зависящих от размера архитектуры ... поскольку они могут быть реализованы как' signed int' (чтобы допускать отрицательные значения ошибок) как 'unsigned int' (чтобы разрешить большие значения) и 'unsigned long int' (например, в 64-битных архитектурах, 64-битное целое число), чтобы допускать огромные значения. Вам лучше использовать подходящие типы, поскольку они там для вашего удобства. И действительно, больше, если вам нужно наложить указатель на тип, а не на значение. Это распространенная ошибка, которая приводит к многим необнаруженным ошибкам, очень трудно преследовать. –