Como o título implica, a minha pergunta é como obter o tamanho de um fio em C
. Será bom utilizar "tamanho de" se eu' declarei-o (a corda) numa função sem "alloc" nela? Ou, se I'a declarei como um ponteiro? E se eu o inicializei com malloc
? gostaria de ter uma resposta exaustiva.
Pode usar strlen. O tamanho é determinado pelo carácter nulo terminante, pelo que a cadeia passada deve ser válida.
Se quiser obter o tamanho do buffer de memória, que contém o seu cordão, e tem o ponteiro para ele:
Se estiver confuso sobre a diferença entre arrays dinâmicos e estáticos, verifique isto.
Utilize strlen
para obter o comprimento de um **cordel de terminação nula***.
O "tamanho do" devolve o comprimento do **arranjo** e não o fio. Se ele's um ponteiro (`char s), não um array (
char s[]), ele ganhou't funciona, uma vez que devolverá o tamanho do ponteiro (normalmente 4 bytes em sistemas de 32 bits). Acredito que um array será passado ou devolvido como ponteiro, por isso você'perderia a capacidade de utilizar
sizeof` para verificar o tamanho do array.
Assim, somente se a string abranger todo o conjunto (por exemplo char s[] = "stuff"
), utilizaria sizeof
para um conjunto estaticamente definido devolveria o que pretende (e seria mais rápido como seria'não precisaria de fazer um loop through para encontrar o terminador nulo) (se o último caractere for um terminador nulo, terá de subtrair 1). Se não't abranger todo o conjunto, ganhará't devolver o que deseja.
Uma alternativa a tudo isto é armazenar o tamanho da corda.
Enquanto "tamanho de" funciona para este tipo específico de cordel:
char str[] = "content";
int charcount = sizeof str - 1; // -1 to exclude terminating '\0'
Não funciona se "str" for ponteiro (o "tamanho do" retorna o tamanho do ponteiro, geralmente 4 ou 8) ou array com comprimento especificado (o "tamanho do" retorna a contagem de bytes com comprimento especificado, que para o tipo de char).
Basta utilizar strlen()
.