2013-01-18 8 views
5

C/C++ strncmp firma è come il seguente:C/C++ qual è il valore di ritorno di strncmp quando la dimensione è 0

int strncmp (const char * str1, const char * str2, size_t num); 

La mia domanda è che cosa è il valore di ritorno, se num è 0? Come dice lo standard? Non trovare una risposta da alcuni documenti online.

Grazie.

+0

A rigor di logica dovrebbe essere 0, dal momento che non c'è modo per uno delle corde per essere maggiore o minore dell'altra. –

+0

Si potrebbe sempre [provarlo e vedere] (http://ideone.com/4e4frw). – ellotheth

risposta

6

Beh, strncmp confronta al massimo num caratteri delle due stringhe, quindi con num == 0, confronta nessuno, quindi non trova differenza, quindi restituisce 0.

+0

Ma questo non ha senso. restituisce 0 significa che le due stringhe sono identiche. in realtà non ci sono. Se quello è lo standard dice, quindi penso che sia un bug nello standard. Non importa cosa restituisce 0 o 1, non è un valore ragionevole, penso. –

+3

@nowgainsnowpains: una stringa contenente zero caratteri è identica a un'altra stringa che contiene zero caratteri. –

+3

@nowgainsnowpains Anche se restituire 0 da 'strcmp' significa che le stringhe sono uguali, ciò non vale per' strncmp'. Per quella funzione, restituendo 0 significa che le sottostringhe dei primi caratteri 'n' sono uguali. Passare a zero per 'n' significa in effetti confrontare due stringhe vuote, che sono effettivamente uguali tra loro. – dasblinkenlight