Trovare la lunghezza di un array di char

Ho un po ‘ di codice come segue:

int i=0;
char a[7]={0x00,0xdc,0x01,0x04};
int len=0;
len = sizeof(a);
printf("The Length is : %d", len);

Qui voglio trovare la lunghezza dell’array a in c?
Come si può fare?

  • È, ur codice di restituzione di eventuali errori?
  • NON è solo mostrando il 7 come risposta..
  • Penso che si desidera strlen(), ma perché il vostro primo carattere è 0, si ottiene 0.
  • Avete dichiarato la vostra matrice come a[7] così obvioulsy sizeof avrebbe restituito 7.
  • sì, non usare sizeof, piuttosto di debug, a partire dal 1 val, u ti c i valori vuoti dopo 4
InformationsquelleAutor Nikhil | 2011-05-27

 

5 Replies
  1. 31

    Per convenzione C le stringhe sono “terminazione null’. Che significa che c’è un extra byte alla fine con il valore di zero (0x00). Qualsiasi funzione che fa qualcosa con una stringa (come printf) considera una stringa alla fine, quando si trova null. Questo significa anche che, se la stringa non è null terminato, si continuerà fino a quando non trova un carattere null, che può produrre alcuni risultati interessanti!

    Come primo elemento dell’array è 0x00, sarà considerato lunghezza zero (non personaggi).

    Se è definita la stringa da:

    char a[7]={0xdc,0x01,0x04,0x00};

    ad esempio con terminazione null

    quindi è possibile utilizzare strlen per misurare la lunghezza della stringa memorizzata nell’array.

    sizeof misura la dimensione di un tipo. Non è ciò che si desidera. Ricordo anche che la stringa in un array può essere inferiore alla dimensione della matrice.

    • La lunghezza dell’array è 7. Zero è la lunghezza della stringa che viene memorizzato nella matrice.
    • Penso sia chiaro che lui vuole sapere la lunghezza della stringa non array, come egli sa che la lunghezza dell’array è di 7 (vedi la sua domanda + commenti), e ritiene che il ‘male’. Sono stato molto attento a dire che strlen restituisce la lunghezza della stringa, ma ho aggiunto un chiarimento. Penso che la questione nasce dal fatto che lui vuole sapere la lunghezza della stringa, ma è confuso (di qui il titolo della domanda) perché non è uguale alla lunghezza dell’array.
  2. 3

    sizeof restituisce la dimensione del tipo di variabile in byte. Quindi nel tuo caso è di restituire la dimensione del vostro char[7] che è 7 * sizeof(char). Dal sizeof(char) = 1, il risultato è 7.

    L’espansione di un altro esempio:

    int intArr[5];
    printf("sizeof(intArr)=%u", sizeof(intArr));

    sarebbe resa 5 * sizeof(int), così si potrebbe ottenere il risultato “20” (almeno su una normale piattaforma a 32bit. Su altri sizeof(int) potrebbe essere diversa)

    Per tornare al tuo problema:

    Sembra, che ciò che si vuole sapere è la lunghezza della stringa contenuta
    all’interno di array e non il totale dimensione della matrice.

    Per definizione, C-Stringhe devono essere terminato con un trailing ‘\0’ (0 Byte).
    Quindi, per ottenere la lunghezza della stringa contenuta all’interno della vostra matrice, che è stato
    prima di terminare la stringa, in modo che si può raccontare quando è finito. Altrimenti non ci sarebbe modo di sapere.

    Tutte le funzioni standard di costruire su questa definizione, quindi, se si chiama strlen per recuperare
    il str ing len ght, sarà scorrere l’array dato fino a quando non trova il primo 0 byte, il che nel tuo caso sarebbe il primo elemento.

    Un’altra cosa che si potrebbe bisogno di sapere che solo perché non riempire i restanti elementi del vostro char[7] con un valore, che in realtà contengono casuale valori indefiniti.

    Speranza che ha aiutato.

  3. 1

    Si può provare questo:

       char tab[7]={'a','b','t','u','a','y','t'};
       printf("%d\n",sizeof(tab)/sizeof(tab[0]));
  4. 0

    Si può fare len = sizeof(a)/sizeof(*a) per qualsiasi tipo di matrice. Ma, hai inizializzato come a[7] = {...} significato la sua lunghezza è di 7…

    • sizeof(a) ti da la dimensione del puntatore dell’array.
    • Penso che ti dà la dimensione dell’array, in questo caso. Se l’array è stato creato utilizzando di nuovo, ti dà la dimensione di un puntatore
    • è un array, non un puntatore
    • Sì, non so perché ho scritto il mio commento precedente. 🙂

Lascia un commento