Autor
|
Tema: Como manejar cadenas en c?? (Leído 5,841 veces)
|
rod00x3
Desconectado
Mensajes: 21
|
Hola mi duda es sobre quisa lo mas facil pero nadamas no encuentro solucion ya quedo claro que para manejar cadenas de caracteres solo hay que declararlas y deben terminar en nulo
segun la forma mas sencilla de declarar cadenas de caracteres es:
car cadena[]="Texto que desees"; Pero como puedo hacer para vacear la cadena?? es decir que esta ahora contenga
cadena=""
alguien podria audarme
|
|
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
Mientras que la cadena en la posición i no sea igual que el final de línea (carácter nulo) , sustituye cadena en la posición i por 0. char cadena[] = "Texto que desees"; int i; for( i = 0 ; cadena [i] != '\0' ; i++ ) { cadena[i] = 0; }
También puedes hacer esto ( sustituye strlen -1 carácteres de cadena por 0's ): #include <string.h> #include <stdio.h> int main ( int argc, char *argv[] ) { char cadena[]="Texto que desees"; return 0; }
¡Un saludo!
|
|
|
En línea
|
Regístrate en
|
|
|
TopoJunior
Desconectado
Mensajes: 40
|
No sé si te refieres a esto :SSS Pero por ejemplo una forma de declararlas es::: #include <stdio.h> main() { char cadena[10]; // Aquí ya declaras la cadena... gets(cadena);// Para que nos entendamos, aqui puedes escribir y los caracteres que escribas se almacenan en la cadena. Debes escribir menos de 10, porque pusiste [10] caracteres. printf("Has escrito esto. %s", cadena); // Aquí lo que haces es decir que %s lo sustituya por lo que almacenamos en la cadena, y pondra lo que escribiste while(1); } Espero que te sirva!!!
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
En el caso del valor 0 no hace falta especificar número de caracteres a sustituir. Para cualquier valor distinto de cero se obtendrá la cedena nula:#include <string.h> #include <stdio.h> int main ( int argc, char *argv[] ) { char cadena[]="Texto que desees"; memset ( cadena , 0 , 1 ); /* <==aqui */ return 0; }
Saluditos!.
|
|
|
En línea
|
|
|
|
rod00x3
Desconectado
Mensajes: 21
|
Muchas gracias por sus respuestas ahorita mismo checo y les aviso como me fue gracias.
|
|
|
En línea
|
|
|
|
rod00x3
Desconectado
Mensajes: 21
|
Perdon me surgio una duda que no acabo de entender... segun el codigo:
int main ( int argc, char *argv[] ) { char cadena[]="Texto que desees"; memset ( cadena , 0 , 1 ); /* <==aqui */ }
Para evaluar que la cadena es nula basta con un:
if(cadena==NULL){//hacer algo}
o tengo que evaluar de alguna otra forma??
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Para evaluar que la cadena es nula basta con un:
if(cadena==NULL){//hacer algo}
o tengo que evaluar de alguna otra forma?? No tiene caso utilizar memset en la forma indicada ya que tiene el mismo efecto que la asignación: cadena[0] = '\0';
Para verificar si el array almacena una cadena vacía basta con verificar el valor de su primer elemento: if (cadena[0] == '\0'){ /* Cadena vacia */ }else { /* Al menos un caracter */ }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
rod00x3
Desconectado
Mensajes: 21
|
Dios gracias por sus respuestas es increible que algo tan importante no este tan documentado o no se alle en la web, todo lo que busco sobre cadenas en c me lleva a la libreria string.h y solo son funciones de comparacion, y copiado, solo una duda mas,
tengo una variable tipo int, quiero convertirla en cadena y concatenarla a otra cadena pero solo me muestra basura no el valor de la variable como tal. codigo: ... int p=12; char valor; char cad[100];
valor=(char)p;
memset(cad,0,100); strcat(cad,"El numero actual es: "); strcat(cad,valor); strcat(cad,"apresiamos");
printf("%s",cad); ...
Use lo anterior y funciono bien pero el problema se da con la concatenacion del entero deberia desplegar: El numero actual es: 12apresiamos
Pero en lugar de eso despliega: El numero actual es: ??#$%"# (unos garabatos raros)apresiamos
De antemano gracias.
|
|
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
No tiene caso utilizar memset en la forma indicada ya que tiene el mismo efecto que la asignación: cadena[0] = '\0';
Para verificar si el array almacena una cadena vacía basta con verificar el valor de su primer elemento: if (cadena[0] == '\0'){ /* Cadena vacia */ }else { /* Al menos un caracter */ }
Un saludo El mismo efecto no tiene, aparentemente sí, pero en cadena[1] sigue estando la 'e' y así sucesivamente hasta el carácter nulo de final de cadena. Depende de lo que quieras hacer con la cadena utilizas una u otra manera solo que la que dice rir3760 te sustituye el primer carácter por el final de línea, es obvio que la cadena quedaría vacía. Y yo sustituyo todos los elementos del array por 0. Así que quedaría igual solo que rir3760 tiene en el primer elemento un 0 y en los demás lo mismo: Caracter Nulo + "exto que desees" + Caracter Nulo , y yo en todos un 0, ya depende de lo que quieras hacer después con la cadena. EDITADO:Para convertir de entero a cadena no puedes hacer un cast directamente tienes que utilizar por ejemplo la función sprintf: int p = 12; char cad[100]; sprintf(cad , "El numero actual es: %dapresiamos", p );
Despliega unos garabatos raros porque un int no contiene los valores numericos como cadena, en una cadena, cada byte es una letra, en un int los 4 bytes conforman el número de 32 bits. Entonces al esperar strcat una cadena, se pone a buscar el carácter nulo y hasta que no lo encuentra te concatena carácteres raros. ¡Un saludo!
|
|
« Última modificación: 7 Febrero 2013, 19:43 pm por avesudra »
|
En línea
|
Regístrate en
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Tienes que pasar el entero a cadena, versus ascii:#include <stdio.h> #include <string.h> int main() { int p=12; char valor[10]; char cad[100]={0}; valor[10]=itoa (p,valor,10); strcat(cad,"El numero actual es: "); strcat(cad,valor); strcat(cad,"apresiamos"); printf("%s",cad); return 0; }
Saluditos!.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Como manejar JSliders?
Java
|
J@ziel
|
5
|
3,685
|
9 Marzo 2010, 19:17 pm
por Leyer
|
|
|
manejar archivos abiertos como pestañas
.NET (C#, VB.NET, ASP)
|
Zeroql
|
5
|
4,302
|
12 Marzo 2010, 00:04 am
por Zeroql
|
|
|
Como se puede manejar puerto USB en visual??
Programación Visual Basic
|
Fucko
|
3
|
4,433
|
27 Septiembre 2010, 16:44 pm
por Fucko
|
|
|
Cómo aprender a manejar ADC NetScaler
Redes
|
VictorAlfCTX
|
0
|
1,754
|
25 Noviembre 2014, 17:37 pm
por VictorAlfCTX
|
|
|
Como manejar un Buffer de 11000 caracteres ?
Programación C/C++
|
bash
|
1
|
1,934
|
27 Mayo 2015, 18:49 pm
por Peregring-lk
|
|