Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - avesudra

#341
El problema es que por consola tienes que enlazar la librería math.h , en caso contrario te dice que no está definida, así que tendrás que compilar así:
gcc nombre_de_tu_fichero.c -lm
El "-lm" es para enlazar la librería math
Te dejo la referencia http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html
#342
Hola NathanD, supongo que es por hacer más flexible la utilización de la función, dado que strcat devuelve un puntero a la cadena concatenada(al contrario de lo que dices) que es el mismo que tu le especificas en el primer parámetro. Fíjate aquí:

http://www.cplusplus.com/reference/cstring/strcat/

Respondiendo a tu pregunta:

La diferencia es clara, tu función strcat no devolvería nada, y la strcat de la cabecera string un puntero a una cadena, por eso se definió así:
char * strcat ( char * destination, const char * source );

A efectos prácticos si yo quiero hacer esto con tu función no podría pues no devuelve el resultado esperado:

#include <stdio.h>

int main(int argc, char * argv [])
{
char cadena1[] = "hola";
char cadena2[] = "adios";
char *cadenaConcatenada = NULL;
cadenaConcatenada = mi_strcat(cadena1,cadena2);
return 0;
}

Pero con la otra sí:

#include <stdio.h>
#include <string.h>

int main(int argc, char * argv [])
{
char cadena1[] = "hola";
char cadena2[] = "adios";
char *cadenaConcatenada = NULL;
cadenaConcatenada = strcat(cadena1,cadena2);
return 0;
}


Como dije antes supongo que será por flexibilizar los usos de la función.

¡Un saludo!
#343
Programación C/C++ / Re: ATOI + ITOA remake
24 Febrero 2013, 19:04 PM
Hola, que yo sepa atoi ya no se usa pues está obsoleta e itoa no está definida en el estándar de C como decía rir3760 en lugar de todo ello habría que usar:
long int strtol (const char* str, char** endptr, int base);

Referencia: http://www.cplusplus.com/reference/cstdlib/strtol/
Información de atoi obsoleta en la página de la libc: http://www.gnu.org/software/libc/manual/html_node/Parsing-of-Integers.html

Y para itoa se puede usar esto(que lo único que arregla es la portabilidad):
int sprintf ( char * str, const char * format, ... );

En teoría lo de las conversiones de bases debería funcionar con esas funciones.

PD: Digo esto porque tiene poco sentido ponerse a reinventar atoi e itoa ( si es para aprender y practicar si lo tiene ) cuando estas no son usadas o no deberían usarse.

¡Un saludo!
#344
Cita de: leosansan en  9 Febrero 2013, 00:00 AM
Pues a míme escribe el fichero sin problemas.
Código (cpp) [Seleccionar]

#include <iostream>
#include <fstream>
using namespace std;


int main ()
{

ofstream F("texto.txt");
string nombre;
cin>>nombre;
cout<<"hola como estas " << nombre << endl;
F<<"hola como estas" << nombre << endl;
return 0;
}


SAlida en pantalla:
leosan
hola como estas leosan

Process returned 0 (0x0)   execution time : 4.884 s
Press any key to continue.


Salida en fichero:

hola como estas leosan


Saluditos!.
Ídem.
#345
Cita de: leosansan en  7 Febrero 2013, 22:30 PM
Tienes que pasar el entero a cadena, versus ascii:
Código (cpp) [Seleccionar]
#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!
#346
Si algo ha cambiado parece,  no en la forma de hacerlo pero parece que en esta versión de codeblocks al guardar los archivos como decías antes los guarda como archivos sin extensión de texto plano, así que cuando los guardes ponle extensión .c (o cpp en el caso de C++) y ya sale coloreado y se puede compilar. En lo de los proyectos creo que sigue igual.
#347
Cita de: Oblivi0n en  7 Febrero 2013, 13:07 PM
Os aseguro que el mayor miedo que existe es llevar casi 1 minuto bajo el agua y no tener aire ni poder salír  :-X , espero que no me vuelva a pasar nunca.
Uff si me has hecho recordadlo, menos mal que me cogieron a tiempo.
#348
Pero algún error tiene que haber, cuando le das a compilar en la pestaña de abajo donde pone Build Log ¿que sale? Revisa el link que te puse antes.
#349
Lo del botón Build puede ser porque te has bajado la versión de Codeblocks sin compilador y obviamente no lo encuentra. Prueba a bajarte la que tiene el compilador(la que pesa más) desde AQUÍ o bájate el compilador y configúralo con Codeblocks, lo primero es lo más fácil. En cuanto a lo de que se vea coloreado, eso solo sale cuando el archivo ya está guardado. Prueba creando un proyecto por ejemplo.

Hace poco un usuario también tuvo problemas y amchacon se lo solucionó , este es el link del post:
http://foro.elhacker.net/programacion_cc/duda_dev_c-t382282.0.html
¡Un saludo!
#350
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!