Nella lettura: How can I check that elements of an array are all same without using counter?, @Skizz utilizza la soluzione elegante:valore di ritorno di memcmp (ptr1, ptr2, 0)?
memcmp (&string [0], &string [1], sizeof string [0] * (N - 1))
Quindi, se N sembra essere 1, otteniamo
memcmp (&string [0], &string [1], 0)
è il valore di ritorno certo di essere 0 quando il confronto la lunghezza è 0?
caso di prova (Cygwin gcc version 4.8.1 Windows a 64 bit) restituisce 0
. Quindi so su questo e pochi altri compilatori/piattaforme che si tratta di 0.
printf("%d\n", memcmp("foo", "bar", 0));
C11 progetto spec segue, ma appare tranquillo sulla questione. Forse un'altra parte delle specifiche o qualcosa dice qualcosa?
7.24.4.1 La funzione memcmp
Trama
#include <string.h>
int memcmp(const void *s1, const void *s2, size_t n);
Descrizione
La funzione memcmp confronta i primi n caratteri dell'oggetto puntato da s1 a i primi n caratteri dell'oggetto puntato da s2.
ritorni
La funzione memcmp restituisce un intero maggiore, uguale o minore di zero, pertanto come l'oggetto puntato da s1 è superiore, uguale o inferiore dell'oggetto puntata da s2 .
(Si supponga & string [1] non ha riferimento alla memoria illegale)
Se 1 == N allora non farlo. –
'memcmp' non è affidabile per confrontare due oggetti con lo stesso valore se gli oggetti possono contenere byte di riempimento, bit di riempimento o più codifiche dello stesso valore (come uno zero positivo e uno zero negativo). –
@koodawg: Perché no? –