elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como manejar cadenas en c??
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Como manejar cadenas en c??  (Leído 5,280 veces)
rod00x3

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Como manejar cadenas en c??
« en: 6 Febrero 2013, 20:27 pm »

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 Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Como manejar cadenas en c??
« Respuesta #1 en: 6 Febrero 2013, 20:38 pm »

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.
Código
  1. char cadena[] = "Texto que desees";
  2. int i;
  3. for( i = 0 ; cadena [i] != '\0' ; i++ )
  4. {
  5.  cadena[i] = 0;
  6. }
También puedes hacer esto ( sustituye strlen -1 carácteres de cadena por  0's ):
Código
  1. #include <string.h>
  2. #include <stdio.h>
  3.  
  4. int main ( int argc, char *argv[] )
  5. {
  6.  char cadena[]="Texto que desees";
  7.  memset ( cadena , 0 , strlen ( cadena ) - 1 );
  8.  return 0;
  9. }

¡Un saludo!


En línea

Regístrate en
TopoJunior

Desconectado Desconectado

Mensajes: 40



Ver Perfil
Re: Como manejar cadenas en c??
« Respuesta #2 en: 6 Febrero 2013, 21:14 pm »

No sé si te refieres a esto :SSS Pero por ejemplo una forma de declararlas es:::
Código:
#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 Desconectado

Mensajes: 1.314


Ver Perfil
Re: Como manejar cadenas en c??
« Respuesta #3 en: 7 Febrero 2013, 14:14 pm »

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:

Código
  1. #include <string.h>
  2. #include <stdio.h>
  3.  
  4. int main ( int argc, char *argv[] )
  5. {
  6.  char cadena[]="Texto que desees";
  7.  memset ( cadena , 0 , 1 ); /* <==aqui */
  8.  return 0;
  9. }

Saluditos!.
En línea

rod00x3

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Como manejar cadenas en c??
« Respuesta #4 en: 7 Febrero 2013, 18:00 pm »

Muchas gracias por sus respuestas ahorita mismo checo y les aviso como me fue gracias.
En línea

rod00x3

Desconectado Desconectado

Mensajes: 21


Ver Perfil
Re: Como manejar cadenas en c??
« Respuesta #5 en: 7 Febrero 2013, 18:03 pm »

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 Desconectado

Mensajes: 1.639


Ver Perfil
Re: Como manejar cadenas en c??
« Respuesta #6 en: 7 Febrero 2013, 18:59 pm »

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:
Código
  1. cadena[0] = '\0';

Para verificar si el array almacena una cadena vacía basta con verificar el valor de su primer elemento:
Código
  1. if (cadena[0] == '\0'){
  2.   /* Cadena vacia */
  3. }else {
  4.   /* Al menos un caracter */
  5. }

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 Desconectado

Mensajes: 21


Ver Perfil
Re: Como manejar cadenas en c??
« Respuesta #7 en: 7 Febrero 2013, 19:27 pm »

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 Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: Como manejar cadenas en c??
« Respuesta #8 en: 7 Febrero 2013, 19:31 pm »

No tiene caso utilizar memset en la forma indicada ya que tiene el mismo efecto que la asignación:
Código
  1. cadena[0] = '\0';

Para verificar si el array almacena una cadena vacía basta con verificar el valor de su primer elemento:
Código
  1. if (cadena[0] == '\0'){
  2.   /* Cadena vacia */
  3. }else {
  4.   /* Al menos un caracter */
  5. }

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:
Código
  1. int p = 12;
  2. char cad[100];
  3. memset(cad, 0, 100);
  4. sprintf(cad, "El numero actual es: %dapresiamos", p);
  5. printf("%s", cad);
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 Desconectado

Mensajes: 1.314


Ver Perfil
Re: Como manejar cadenas en c??
« Respuesta #9 en: 7 Febrero 2013, 22:30 pm »

Tienes que pasar el entero a cadena, versus ascii:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6. int p=12;
  7. char valor[10];
  8. char cad[100]={0};
  9. valor[10]=itoa (p,valor,10);
  10. strcat(cad,"El numero actual es: ");
  11. strcat(cad,valor);
  12. strcat(cad,"apresiamos");
  13. printf("%s",cad);
  14. return 0;
  15. }
  16.  
Saluditos!.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Como manejar JSliders?
Java
J@ziel 5 3,468 Último mensaje 9 Marzo 2010, 19:17 pm
por Leyer
manejar archivos abiertos como pestañas
.NET (C#, VB.NET, ASP)
Zeroql 5 4,051 Último mensaje 12 Marzo 2010, 00:04 am
por Zeroql
Como se puede manejar puerto USB en visual??
Programación Visual Basic
Fucko 3 4,272 Último mensaje 27 Septiembre 2010, 16:44 pm
por Fucko
Cómo aprender a manejar ADC NetScaler
Redes
VictorAlfCTX 0 1,557 Último mensaje 25 Noviembre 2014, 17:37 pm
por VictorAlfCTX
Como manejar un Buffer de 11000 caracteres ?
Programación C/C++
bash 1 1,733 Último mensaje 27 Mayo 2015, 18:49 pm
por Peregring-lk
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines