Hola,
Estoy programando en C y mi duda es la siguiente:
Si tengo un char m[32] = "0000111100001111...", como puedo ir cogiendo de byte en byte? o elemento en elemento? Y si tuviera char *m[32] como accederia a los datos?
Gracias,
| |||
C Hola, Estoy programando en C y mi duda es la siguiente: Si tengo un char m[32] = "0000111100001111...", como puedo ir cogiendo de byte en byte? o elemento en elemento? Y si tuviera char *m[32] como accederia a los datos? Gracias, |
| |||
Re: C Hola, Entonces si quisiera unir los elementos m[0] y m[1] podría hacer: char *x = m[0]+m[1]? Y si quisiera tener un vector de string debería declararlo como: char *vector[3]? o puedo hacer simplemente esto: char vector[3] = {"01111111","00111100","00110011"}; Muchas gracias, Lis |
| ||||
Re: C Cita: No, para concatenar cadenas necesitas (primero tener el espacio necesario) usar la funcion strcat.No podes hacerlo por una razon, estas declarando un array de 3 caracteres, si hicieras lo mismo pero con char *vector[3] si funcionaria al ser un array de tres punteros a caracter a los cuales se les asignaria las direcciones en memoria (seccion de datos) de esas cadenas.
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| ||||
Re: C Te lo voy a explicar de una manera rapida y resumida. char es, en las arquitecturas x86, un byte. char var; Esto tiene sólo espacio para UN byte. Y un byte sólo puede contener un caracter ASCI. Si tienes una array así: char var[3]; quiere decir que tienes 3 bytes. var[0]->byte número 1 var[1]->byte número 2 var[2]->byte número 3. Entonces solo puedes contener 3 caracteres. Pero. Si haces eso: char car[3]="abc"; hay un pequeño error. Las cadenas de texto siempre terminan con un valor null. entonces en realidad tendrias algo asi: "abc\0" por lo que ya son 4 bytes. (se supone es asi, no tengo la total seguridad) Entonces ya tienes que hacer algo asi: char var[4]="abc"; (Continua) |
| ||||
Re: C Ahora. char *var; es un puntero. Es muy parecido a los arrays, pero con muchas mas ventajas y mcuho mas peligrosos y traicioneros, claro, si es que no lo sabes usar. char *var=lo que sea; lo unico que hace es apuntar a ese "lo que sea". char *var[]; Es un arreglo de punteros. Como si tubieras muchos punteros ordenados en fila. Si queires saber mas sobre los punteros en el link de mi firma hay bastante informacion. Saludos |
| ||||
Re: C Un byte puede contener cualquier valor entre 0 y 255 (8 bits), mientas que el standard ASCII (no el extendido) solo contiene valores de 0 a 127 (7 bits). http://en.wikipedia.org/wiki/Ascii
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| |||
Re: C Hola, Gracias por vuestra ayuda, he entendido como funcionan los char[] en C, pero a ver, tengo otra duda: Si yo lo que tengo es un char m[255]="0001010101011101110100011....", como puedo coger byte por byte, porque lo de m[0],m[1] no funciona. He intentado hacer esto: int x = strcat(m[0], m[1]); pero no funciona. Muchas gracias, Un saludo, Lis |
| ||||
Re: C Cita: Lo que no funciona es el que codigo que pusiste que no tiene ninguna logica. m[0] y m[1] no son punteros a char sino chars asi que no se le pasan como parametros a strcat que pide dos punteros a char (destino y origen) y no devuelve un int como resultado sino un puntero a char (destino).¿Que queres hacer exactamente? Si lo que queres es una segunda cadena primero necesitas, como ya te dije, el espacio para la misma. Aca tenes algo de codigo a ver si te haces una idea:
Código:
Supongo que lo que querias hacer era algo asi:char m[] = "0001010101011101110100011...."; printf("%s\r\n", m); printf("%c\r\n", m[0]); printf("%c\r\n", m[1]); printf("%c\r\n", m[3]); char nCadena[255]; memset(nCadena, 0, sizeof(nCadena)); strncpy(nCadena, m, 2); printf("%s\r\n", nCadena); strcat(nCadena, " MAS TEXTO"); printf("%s\r\n", nCadena);
Código:
char *vector[3] = {"01111111","00111100","00110011"}; char conc[1024]; memset(conc, 0, sizeof(conc)); strcpy(conc, vector[0]); strcat(conc, vector[1]); printf("%s\r\n", conc); Siempre es mejor usar memoria dinamica.
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| |||
Re: C Hola, Te agradezco mucho tu ayuda, me has hecho comprender mejor el funcionamiento de los char pero yo sigo sin saber como separar de 8 bits en 8 bits un char[]: char a[48] = "111111100000001111111100000000111111110000000 0", quiero obtener: char b[8] = "11111111" char c[8] = "00000000" char d[8] = "11111111" char e[8] = "00000000" char f[8] = "11111111" char g[8] = "00000000" Muchas gracias, Un saludo, Ana |
| ||||
Re: C Cita: Lo que tenes que hacer es copiar 8 caracteres desde una direccion determinada a otra. Por ejemplo para obtener lo que seria tu c (segundo conjunto de 8 caracteres comenzando en a) lo que harias seria lo siguiente:
Código:
Tenes que aplicar la misma logica para obtener todos los demas. char c[9]; //necesitamos al menos la cantidad de caracteres mas uno que es el terminador (0) memset(c, 0, sizeof(c)); //ponemos todos los caracteres a 0 strncpy(c, a + 8, 8); //copiamos 8 caracteres desde a + 8
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| ||||
Re: C ¿Que queres hacer exactamente? Me refiero mas que nada al objetivo, esa memoria ya la tenes reservada estaticamente asi que no la podes liberar, lo maximo que podrias hacer es ponerla a cero y para eso podes usar la funcion memset.
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |