2010-11-15 20 views
36

Qual è un modo in cui qualcuno può trovare la lunghezza di una matrice di caratteri?Trovare la lunghezza di una matrice di caratteri in C

sarò felice di accettare pseudo-codice, ma non sono contrario a qualcuno che scrive fuori se vorrebbero :)

+0

Vuoi dire altro che cercare il NUL? –

+3

Uno 'strlen()', o 'sizeof()'. Dipende da ciò di cui hai bisogno. – ruslik

+0

una stringa è un tipo specifico di oggetto memorizzato * in * una matrice di caratteri (una matrice di caratteri non può contenere una stringa) –

risposta

56

disponibile The array di caratteri è null terminata,

char chararray[10]; 
size_t len = strlen(chararray); 
+5

'sizeof()' asnd 'strlen()' entrambi restituiscono 'size_t', che differisce da' int' in quanto è potenzialmente più grande o più piccolo e sicuramente senza segno. –

+0

Grazie ha funzionato bene – Sam

0

Dicendo "Array di caratteri" intendi una stringa? Come "ciao" o "hahaha questa è una stringa di caratteri" ..

Ad ogni modo, utilizzare strlen(). Leggi un po 'su di esso, ci sono un sacco di informazioni su di esso, come here.

+1

Se è un letterale o un 'carattere [#]', puoi usare 'sizeof', ma fai attenzione a non provare a usarlo su un' char * ' –

+0

Se usi' sizeof', non dimenticare di sottrarre 1 per il terminatore null. – dan04

+0

@ dan04: solo se l'array è inizializzato con lunghezza implicita come in 'char s [] =" sup ";'. –

10

Se si dispone un array, allora si può trovare il numero di elementi nella matrice dividendo la dimensione della matrice in byte per la dimensione di ogni elemento in byte:

char x[10]; 
int elements_in_x = sizeof(x)/sizeof(x[0]); 

Per caso specifico di char, dal sizeof(char) == 1, sizeof(x) restituirà lo stesso risultato.

Se si dispone di un puntatore a un array, non è possibile trovare il numero di elementi nella matrice puntata. Devi tenerne traccia da solo. Ad esempio, dato:

char x[10]; 
char* pointer_to_x = x; 

non c'è modo di dire da soli pointer_to_x che punta a una matrice di 10 elementi. Devi tenere traccia di tali informazioni da soli.

Ci sono molti modi per farlo: puoi memorizzare il numero di elementi in una variabile o puoi codificare il contenuto dell'array in modo tale che tu possa ottenere le sue dimensioni in qualche modo analizzandone il contenuto (questo è effettivamente ciò che è nullo -le stringhe terminate: collocano un carattere '\0' alla fine della stringa in modo da sapere quando termina la stringa).

+0

'sizeof()' asnd 'strlen()' entrambi restituiscono 'size_t', che differisce da' int' in quanto è potenzialmente più grande o più piccolo e certamente senza segno. –

+0

@Chris Lutz: È vero. –

2

È possibile utilizzare strlen

strlen(urarray); 

è possibile codificare da soli in modo da capire come funziona

size_t my_strlen(const char *str) 
{ 
    size_t i; 

    for (i = 0; str[i]; i++); 
    return i; 
} 

se si desidera che la dimensione della matrice quindi si utilizza sizeof

char urarray[255]; 
printf("%zu", sizeof(urarray)); 
+2

Qualsiasi 'strlen()' dovrebbe restituire 'size_t' (che non è firmato) non' int' (che è firmato). E l'identificatore 'printf()' per 'size_t' è' "% zu" '(o' "% zx" 'o' "% zo" 'per esadecimale o ottale). –

+0

Hai ragione, una lunghezza può a stento essere negativa :) – dco

4

Se si desidera che la lunghezza dell'array di caratteri sia sizeof(array)/sizeof(array[0]), se si desidera la lunghezza di La stringa utilizza strlen(array).

+0

funziona solo se tutti gli elementi hanno la stessa lunghezza? –

6

Ciao anche se le risposte sopra sono OK, ecco il mio contributo alla tua domanda.

//returns the size of a character array using a pointer to the first element of the character array 
int size(char *ptr) 
{ 
    //variable used to access the subsequent array elements. 
    int offset = 0; 
    //variable that counts the number of elements in your array 
    int count = 0; 

    //While loop that tests whether the end of the array has been reached 
    while (*(ptr + offset) != '\0') 
    { 
     //increment the count variable 
     ++count; 
     //advance to the next element of the array 
     ++offset; 
    } 
    //return the size of the array 
    return count; 
} 

Nella funzione main si chiama la dimensione della funzione passando l'indirizzo del primo elemento dell'array. Per esempio:

char myArray[] = {'h', 'e', 'l', 'l', 'o'}; 
printf("The size of my character array is: %d\n", size(&myArray[0])); 

Tutto il meglio

+1

Perché avere una variabile separata per l'offset quando si può semplicemente usare il conteggio? Ecco una versione più breve (ma più difficile da capire): 'int strlen (const char * pStr) { \t int i = 0; \t while (* pStr) { \t \t ++ i; \t} \t ritorno i; } ' – DividedByZero

1

V'è anche una forma compatta per questo, se non si vuole fare affidamento su strlen. Partendo dal presupposto che l'array di caratteri che si stanno prendendo in considerazione è "msg":

unsigned int len=0; 
    while(*(msg+len)) len++; 
0

utilizzando sizeof()

char h[] = "hello"; 
printf("%d\n",sizeof(h)-1); //Output = 5 

utilizzando string.h

#include <string.h> 

char h[] = "hello"; 
printf("%d\n",strlen(h)); //Output = 5 

utilizzando la funzione (strlenimplementazione)

int strsize(const char* str); 
int main(){ 
    char h[] = "hello"; 
    printf("%d\n",strsize(h)); //Output = 5 
    return 0; 
} 
int strsize(const char* str){ 
    return (*str) ? strsize(++str) + 1 : 0; 
} 
Problemi correlati