Zum Beispiel würde ich gerne wissen, ob es ein signifikanter Unterschied oder gute/schlechte Praxis istWas ist der Unterschied, die Funktion sizeof() und eine vorher deklarierte und initialisierte Variable direkt übergeben?
Auf diese Art und Weise:
unsigned int length_addr;
length_addr = sizeof(cli_addr);
nbytes = recvfrom(sockfd, buffer, sizeof(buffer), 0,
(struct sockaddr *)&cli_addr, &length_addr);
und auf diese Weise:
nbytes = recvfrom(sockfd, buffer, sizeof(buffer), 0,
(struct sockaddr *)&cli_addr, sizeof(cli_addr));
Wann sagst du "beide sind nicht korrekt", sind sie zu 100% falsch? Warum ist der erste nicht korrekt? Ich übergebe eine Referenz von unsigned int. Das Argument socklen_t * darf kein unsigned int sein? –
@jorgesaraiva, 'socklen_t' ist einer der Typen, die stark von der Architekturgröße abhängen ... da sie als' signed int' implementiert werden können (um negative, Fehlerwerte zu berücksichtigen) als 'unsigned int' (zu berücksichtigen) große Werte) und "unsigned long int" (zum Beispiel in 64-Bit-Architekturen, eine 64-Bit-Ganzzahl), um große Werte zu ermöglichen. Sie sollten besser die richtigen Typen verwenden, da sie für Ihre Bequemlichkeit da sind. Und tatsächlich mehr, wenn Sie den Zeiger auf den Typ anstatt auf den Wert setzen müssen. Dies ist ein häufiger Fehler, der zu vielen unentdeckten Fehlern führt, die sehr schwer zu verfolgen sind. –