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
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";
memset ( cadena , 0 , strlen ( cadena ) - 1 );
return 0;
}
¡Un saludo!
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 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!.
Muchas gracias por sus respuestas ahorita mismo checo y les aviso como me fue gracias.
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??
Cita de: rod00x3 en 7 Febrero 2013, 18:03 PMPara 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
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.
Cita de: rir3760 en 7 Febrero 2013, 18:59 PM
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];
memset(cad, 0, 100);
sprintf(cad, "El numero actual es: %dapresiamos", p);
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!
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!.
Cita de: leosansan en 7 Febrero 2013, 22:30 PM
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!.
leosansan si te fijas esa función no está definida en el ANSI-C solo que es soportada por algunos compiladores así que es mejor no usarla. Mira aquí donde pone portabilidad:
http://www.cplusplus.com/reference/cstdlib/itoa/
¡Un saludo!
Cita de: avesudra en 7 Febrero 2013, 19:31 PM
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.
Mi comentario fue en respuesta al mensaje inmediatamente anterior (de
rod00x3), en el utiliza esa función en la forma:
memset(cadena, 0, 1); /* <==aqui */
Por eso comente que no tiene caso utilizar una llamada a función cuando la asignación basta.
Solo un comentario, si lo primero que se piensa hacer con un array es almacenar en el una cadena:
memset(cad, 0, 100);
sprintf(cad, "El numero actual es: %dapresiamos", p);
No es necesario colocar primero (con la función memset) todos los caracteres a cero.
Un saludo