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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Temas
Páginas: 1 [2]
11  Programación / Programación C/C++ / Ayuda con hilos en C en: 27 Agosto 2015, 13:19 pm
Hola a tod@s, ahora estoy aprendiendo a manejar lo básico de los hilos en C, resulta que tengo este código:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <malloc.h>
  4. #include <pthread.h>
  5.  
  6. void * funcion(void *);
  7.  
  8. int main()
  9. {
  10.  
  11. pthread_t idhilo;
  12.  int a=5;
  13. pthread_create(&idhilo, NULL, funcion, &a);
  14. // pthread_join(idhilo, NULL);
  15.  int y;
  16.  for(y=0;y<5;y++) printf("hilo principal\n");
  17.  
  18.  
  19.  
  20. }
  21.  
  22. void * funcion(void * a) {
  23.  
  24.  int x;
  25.  for(x=0;x<5;x++) printf("Se está ejecutando el hilo\n");
  26.  
  27.  
  28. }

Si descomento la linea 14, se ejecuta el hilo y el hilo principal se queda en segundo plano, si está comentada el hilo no llega a ejecutarse, en teoría, por lo que he leido pthread_join() sirve para mantener el hilo padre en espera hasta que el hilo hijo termine su ejecución, pero yo lo que quiero es que se ejecuten los dos hilos a la vez, ya que creo que eso es la finalidad de usar hilos.

Gracias de antemano.

Saludos.
12  Programación / Programación C/C++ / ¿ Cómo funciona este código que pasa de char a int ? en: 27 Agosto 2015, 01:48 am
Buenas, tengo el siguiente código, donde necesitaba convertir un char (no un array, solo un caracter) en un int, y en internet encontré el siguiente método:

Código
  1. int ataque;
  2. ataque=fgetc(stdin);
  3. while(fgetc(stdin) != '\n');
  4. ataque=ataque-48;

El caso es que funciona perfectamente, pero no se por que al restarle 48 al char me devuelve ese int, he estado buscando información pero no me ha quedado claro, y aunque funcione, me gustaría saber por que funciona.

Gracias de antemano.

Saludos.
13  Programación / Programación C/C++ / ¿ Por que fgets me funciona así ? en: 26 Agosto 2015, 12:16 pm
Hola a tod@s, resulta que intento obtener un caracter de stdin con fgets, pero para que funcione correctamente, tengo que crear un char [] de como mínimo 3 de tamaño, dejo el código:

Código
  1. printf("Elige un modo de juego\n");
  2. printf("0 -> Modo multijugador (contra un amigo)\n");
  3. printf("1 -> Modo un jugador (contra CPU)\n");
  4. char modo[3];
  5.  
  6. fgets(modo, 3, stdin);
  7. printf("Modo: %c\n", modo[2]);
  8. if (modo[0]=='0') printf("Has elegido modo multijugador\n");
  9. if (modo[0]=='1') printf("Has elegido modo un jugador\n");
  10.  

Si le doy menos de 3 no llega a coger el '\n' por lo que lo deja en el buffer stdin, ¿ Por que si en teoría son dos caracteres solo ? (el caracter que quiero obtener y el '\n').

Gracias y saludos.
14  Programación / Programación C/C++ / Problema redimensionando array en: 25 Agosto 2015, 18:52 pm
Bueno gracias a vuestra ayuda, he conseguido entender los arrays dinámicos, el caso es que he intentado crear un ejemplo de una matriz dinámica y redimensionarla.

La he redimensionado y funciona perfectamente, pero al redimensionarla, los 3 nuevos índices, cada subindices(punteros dentro de punteros), he hecho que sean de 30 elementos y no de 80, por lo que al referirme al elemento 35 me debería dar error, y no es así, funciona perfectamente,

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void main() {
  5.  
  6. int **p;
  7. p=(int **)malloc(sizeof(int *)*5);
  8. int x;
  9. for(x=0;x<5;x++){
  10.  
  11. p[x]=(int *)malloc(sizeof(int)*80);
  12.  
  13. }
  14.  
  15. p[3][45]=10;
  16. printf("El numero guardado es %d\n", p[3][45]);
  17.  
  18. p=(int **)realloc(p, sizeof(int *)*8);
  19. int y;
  20. for(y=5; y<8; y++){
  21.  
  22. p[y]=(int *)malloc(sizeof(int)*30);
  23.  
  24. }
  25. p[6][35]=25;
  26. printf("Después de redimensionar %d\n", p[6][35]);
  27.  
  28. free(p);
  29.  
  30. }

¿ Por que no da error? ¿he redimensionado mal la matriz?:

Gracias de antemano, saludos.
15  Programación / Programación C/C++ / Ayuda con punteros en C en: 25 Agosto 2015, 14:07 pm
Hola a tod@s, como sabeis estoy aprendiendo C, ya se lo básico pero me he puesto a aprender punteros y estoy hecho un lio, no son pocas las veces que he intentado aprender punteros en C y no lo asimilo ni por a ni por b.

Lo básico de punteros más o menos lo se, se que los punteros se declaran con:

Código
  1. tipo *var;

ej:

Código
  1. int *p;

El caracter & delante de una variable se usa para hayar la dirección de memoria de dicha variable, para después, guardarla en un puntero, ej:

Código
  1. int *p;
  2. int a=5;
  3. p=&a;

Y también se que el caracter * sirve para hayar el valor de lo que apunta un puntero, por ejemplo
Código
  1. int *p;
  2. int a=5;
  3. p=&a;
  4. int b=*p;
  5. printf("el valor de b es: %d\n", b);

Hasta ahí llego, el problema lo tengo en cosas más avanzadas, como cuando leo la relación que hay entre punteros y arrays, no acabo de entenderlo, por ejemplo he escuchado que un array es un puntero pero ya digo no me queda del todo claro como manejarlos.

Por ejemplo, no veo la diferencia entre un

Código
  1. char nombre[10];

de un:

Código
  1. char *nombre;

¿Es lo mismo?

También, si me pudieran explicar un poco los punteros (quitando lo básico que he puesto arriba que se) se lo agradecería muchísimo.

Saludos.
16  Programación / Programación C/C++ / ¿ Merece la pena aprender C++ sabiendo C ? en: 25 Agosto 2015, 09:51 am
Hola a tod@s, resulta que ya más o menos se lo básico de C (me falta entender bien los punteros) y me preguntaba si el siugiente lenguaje que debía aprender es C++, mi meta real, es aprender C, python y PHP, son los 3 lenguajes que más me interesan, pero por otro lado me llama mucho la atención colaborar en algún juego libre como Xonotic o Minetest, que están hechos en C++, además estoy viendo últimamente que casi todo se hace en C++ y es como si me sabiera mal no aprender C++ por que voy a estar un poco "de lado".

Por otro lado me da cosa aprender C++ por que entonces, junto con python y php serían 4 lenguajes... y no se, parece ya demasiado, y no se si me costaría mucho aprender C++ ¿ Sabiendo C me costaría mucho trabajo aprender C++ ? En caso negativo, me gustaría que me recomendaran un libro (en español) donde te enseñen C++ sabiendo ya C, es decir, que no empiece a enseñarte desde C.

Salu2.
17  Programación / Programación C/C++ / Un par de conceptos que tengo que mejorar. en: 24 Agosto 2015, 18:12 pm
Hola a tod@s, hago este post por no hacer dos y no ser tan pesado, el caso es que ya sé más o menos lo básico del maravilloso lenguaje C, pero los punteros aún no los manejo del todo bien y me gustaría que me recomendarais una buena lectura (en español) que expliquen bien los punteros, no solo lo básico si no también algo un poco más avanzado, pero empezando desde el principio.

Una segunda duda que tengo es que en un programilla que he hecho hace poco, scanf me deja \n en el buffer, y al volver a leerlo con fgetc (el stdin me refiero) pues fallaba por que leia ese caracter de más, lo solucioné usando fgets y eliminando el ultimo caracter del string con strlen (para eliminar de lo que había leido el \n).

¿ Qué opinan entonces sobre scanf()? ¿ Es aconsejable ? ¿ Es una mala práctica ? ¿ Es mejor usar fgets ? o si no es así ¿ cuando usar uno u otro ?.

Gracias de antemano.

Saludos.
18  Programación / Programación C/C++ / Ayuda con biblioteca que lee un fichero de configuracion en: 21 Agosto 2015, 20:12 pm
Hola a tod@s, pues ahora estoy haciendo una pequeña libreria que facilita la extracción de información de archivos de configuración, estos ficheros de configuración serían del tipo:

Código:
campo1=valor1
campo2=valor2
#esto lo ignora, es solo un comentario
campo3=valor3
etc...

La función que se usaría tendría la sintaxys:

Código
  1. get_value("archivo.conf", "campo1", valor);
  2.  

Es decir, le pasamos, como primer elemento, el archivo de configuración, como segundo elemento el campo del que va a extraer la información, y como tercer parametro, un array (creado en el programa que usa la librería) donde guardará el valor extraido (con strcpy).

El código es el siguiente:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int get_value(char [], char [], char []);
  6. static void clear_array(char [], int);
  7.  
  8.  
  9. int get_value(char file_conf[], char subject_i[], char value_i[]) {
  10.  
  11. FILE * file;
  12.  
  13. int file_line_size=50;
  14. int subject_size=25;
  15. int value_size=25;
  16.  
  17. char buffer[file_line_size];
  18. char subject[subject_size];
  19. char value[value_size];
  20.  
  21. file=fopen(file_conf, "r");
  22. if (file==NULL) {
  23.  
  24. printf("Error al abrir el archivo\n");
  25. return 1;
  26.  
  27. }
  28.  
  29. int x, y;
  30. while (!feof(file))
  31. {
  32. clear_array(buffer, file_line_size);
  33. clear_array(subject, subject_size);
  34. clear_array(value, value_size);
  35.  
  36. fgets(buffer,file_line_size,file);
  37. if (buffer[0]=='#') continue;
  38. x=0;
  39. for (x=0; x<subject_size; x++) {
  40. if(buffer[x]=='=') break;
  41. subject[x]=buffer[x];
  42. }
  43.  
  44. for (x; x<file_line_size; x++) {
  45.  
  46. value[x]=buffer[x];
  47.  
  48. }
  49. printf("el campo es %s\n", subject);
  50. printf("el valor es %s\n", value);
  51.  
  52. if (strcmp(subject_i, subject)==0) { strcpy(value_i, value); return 0; }
  53. }
  54. printf("No existe el campo dentro del fichero\n");
  55. return 1;
  56. }
  57.  
  58. static void clear_array(char array[], int size) {
  59.  
  60. int x;
  61.  
  62. for(x=0;x<size;x++) {
  63.  
  64. array[x]='\0';
  65.  
  66.  
  67. }
  68.  
  69. }
  70.  

Los problemas que me dan son:

1) No extrae la información, ni siquiera me muestra el campo, la salida que me da es la siguiente:

el campo es
el valor es
el campo es
el valor es
el campo es
el valor es

2) El while hace un ciclo más del que debe, es decir, si el fichero de configuración tiene 3 lineas, el while da 4 vueltas... lo he comprobado con los printfs que he puesto en mitad del while.

Gracias de antemano.

Saludos.
19  Programación / Programación C/C++ / Ayuda con sencillo motor de Pokemon. en: 18 Agosto 2015, 15:20 pm
Hola gente de Elhacker.net, estoy intentando aprender C, y como "reto" me he propuesto implementar un algoritmo sencillo que simule una batalla pokemon (a lo cutre claramente), el caso es que para ello, he almacenado todos los datos de los pokemon, como "puntos de vida", "puntos de poder" etc... en una structura, con la cual defino los dos pokemons.

Pv=puntos de vida, la vida del pokemon
Pp=puntos de poder, es decir, las veces que puedes usar un ataque
Pd= puntos de poder, en este caso, defino un minimo y un maximo, de forma que aleatoriamente un ataque haga x daño.

El caso es que me he quedado atascado en la estructura, entre otras cosas por que no se como rellenar los datos, lo he hecho como he podido pero al ejecutarlo me da error de violación segmento.

Pego el código aquí:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void ayuda(void);
  6. void atacar(int);
  7. void pociones(int);
  8.  
  9. int main() {
  10.  
  11.  
  12. typedef struct {
  13.  
  14. char nombre[25];
  15. int pv;
  16. char **ataque;
  17. int pd[8];
  18. int pp[4];
  19.  
  20. } pokemon;
  21.  
  22. pokemon pokemon1;
  23. pokemon pokemon2;
  24.  
  25. strcpy(pokemon1.nombre, "pokemon1");
  26. pokemon1.pv=100;
  27. pokemon1.ataque[0]="ataque1";pokemon1.ataque[1]="ataque2";pokemon1.ataque[2]="ataque3";pokemon1.ataque[3]="ataque4";
  28.   pokemon1.pd[0]=1;pokemon1.pd[1]=5;pokemon1.pd[2]=2;pokemon1.pd[3]=4;pokemon1.pd[4]=0;pokemon1.pd[5]=4;pokemon1.pd[6]=3;pokemon1.pd[7]=4;
  29.   pokemon1.pp[0]=20;pokemon1.pp[1]=30;pokemon1.pp[2]=10;pokemon1.pp[3]=40;
  30.  
  31. strcpy(pokemon2.nombre, "pokemon2");
  32. pokemon2.pv=100;
  33. pokemon2.ataque[0]="ataque1";pokemon2.ataque[1]="ataque2";pokemon2.ataque[2]="ataque3";pokemon2.ataque[3]="ataque4";
  34.   pokemon2.pd[0]=1;pokemon2.pd[1]=5;pokemon2.pd[2]=2;pokemon2.pd[3]=4;pokemon2.pd[4]=0;pokemon2.pd[5]=4;pokemon2.pd[6]=3;pokemon2.pd[7]=4;
  35.   pokemon1.pp[0]=25;pokemon1.pp[1]=30;pokemon1.pp[2]=70;pokemon1.pp[3]=15;
  36.  
  37.  
  38.  
  39. int turno=1;
  40. char comando;
  41.  
  42.  
  43. while (1) {
  44.  
  45. if (turno==1)
  46. printf("[%s]", pokemon1.nombre);
  47. else
  48. printf("[%s]", pokemon2.nombre);
  49.  
  50. printf("Introduce la orden...");
  51. scanf("&comando");
  52.  
  53. switch ( comando ) {
  54.  
  55. case 'h':
  56. ayuda();
  57. case 'a':
  58. atacar(turno);
  59. case 'p':
  60. pociones(turno);
  61.  
  62.  
  63.  
  64.  
  65.  
  66. }
  67. }
  68. }
  69.  
  70. void ayuda() {
  71.  
  72. printf("h -> Despliega esta ayuda\n");
  73. printf("a -> Ataca al pokemon enemigo\n");
  74. printf("p -> Cura a tu pokemon si tienes pociones\n");
  75.  
  76.  
  77.  
  78. }
  79.  
  80. void atacar(int turno) {
  81.  
  82.  
  83. printf("prueba");
  84.  
  85.  
  86. }
  87.  
  88. void pociones(int turno) {
  89.  
  90.  printf("prueba");
  91.  
  92. }
  93.  
  94.  
  95.  

Me gustaría que me dijerais por que me da ese error y una forma un poco mas elegante de rellenar esos arrays dentro de la estructura.

Saludos.
20  Foros Generales / Foro Libre / Snakehack, plataforma de blogging anónimo para posts sobre hacking. en: 9 Agosto 2014, 01:32 am
Buenas, he creado una web (en mi propio servidor casero), es una plataforma, donde cualquiera puede publicar sus propios posts sobre hacking, sin registro, de forma anónima, salvo por que es publicada vuestra abajo del post, (si os da mal rollo eso, que lo entiendo, usad un proxy), he puesto la ip, por si alguien, utilizando el anonimato de la página la usa con fines malintencionados o ilegales, así, si eso ocurre, se sabrá la ip del individuo.

El caso es, que para publicar un post de hacking, solo será necesario rellenar un formulario, sin registro, hay que poner algo en el campo "autor" que será publicado, pero claro este puede ser un nick, no hace falta registro alguno. la web solo tiene unas horas de vida XD lo he programado yo, desde cero en php y mysql, así que como es tan nuevecita, solo tiene el articulo "sobre el sitio", que es mio explicando de que va el sitio.

Espero que contribuyais y escribais algún tema de lo que querais, criptografía, programación, bases de datos, scripting, redes, lo que sea que esté orientado a la informática/hacking.

La web es: Snakehack

Como nota, decir que para escribir artículos hay que saber html básico, simplemente <p><a> y poco más, ya que el artículo debe ser código html, por ejemplo:

<h2>Titulo cualquiera</h2>

<p>parrafo cualquiera</p>
<p>otro parrafo cualquiera</p>
<a href="direccion">enlace</a>

Saludos.
Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines