Discussion:
saber tamaño real ocupado en un array estatico
(demasiado antiguo para responder)
Alberto
2006-04-24 17:05:16 UTC
Permalink
Hola. Tengo un array de 100 char. De estos 100 char, habrá veces que se
usen todos, pero otras que se usen muchos menos char. ¿ Como puedo saber
exactamente cuantos char realmente se usan ?.
Lo unico que se me ocurre es ir recorriendo caracter a caracter el array
en busca de el caracter '\0'.

algo asi:

char *cad[100];
int num_car=0; /* Aqui almaceno los caracteres realmente usados en cad */
int i=0;

for(i=0;i<100 && cad[i]!='\0';i++)
num_car++;


¿ Alguna sugerencia ?

Alberto
heltena
2006-04-24 17:56:38 UTC
Permalink
strlen(cad);
heltena
2006-04-24 17:57:18 UTC
Permalink
strnlen(cad, 100);
ROC
2006-04-24 21:52:42 UTC
Permalink
Hola:
----------------------------
#include <string.h>

int longitud = strlen(cadena);
----------------------------

NOTA:
Si quieres saber la *longitud real* que ocupa la cadena en la memoria tienes
que sumar 1 a longitud ( longitud = strlen(cadena)+1 ),
dado que la función strlen() NO cuenta el carácter \0 que se utiliza en C
para marcar el final de las cadenas (antiguamente llamadas "cadenas ASCIIZ")
.

Saludos.
ROC
Post by Alberto
Hola. Tengo un array de 100 char. De estos 100 char, habrá veces que se
usen todos, pero otras que se usen muchos menos char. ¿ Como puedo saber
exactamente cuantos char realmente se usan ?.
Lo unico que se me ocurre es ir recorriendo caracter a caracter el array
en busca de el caracter '\0'.
char *cad[100];
int num_car=0; /* Aqui almaceno los caracteres realmente usados en cad */
int i=0;
for(i=0;i<100 && cad[i]!='\0';i++)
num_car++;
¿ Alguna sugerencia ?
Alberto
heltena
2006-04-25 09:12:40 UTC
Permalink
no me di cuenta, tienes mal definida la variable, supongo que lo que
quieres es:
char cad[100];
strncpy(cad, "pepe", sizeof(cad));
printf("%s tiene %c caracteres\n", cad, strnlen(cad, sizeof(cad)));

y la cadena ocupa: strnlen(cad, 100); (y +1 si quieres contar el
centinela del final)
y en memoria tienes reservado sizeof(cad) que normalmente sera 100
bytes.

Loading...