[C con Clase] Ayuda con Punteros y Arrays

Sorcerer sorcerer.cl en gmail.com
Sab Ene 20 05:22:51 CET 2007


Hola David, creo que puedo ayudarte con ese código ^^

DR> Aquí dejo el código:
DR> #include <stdio.h>
DR> > #include <stdlib.h>
DR> > #include <windows.h>
DR> > #include <iostream>
DR> >
DR> > using namespace std;
DR> >
DR> > main()
DR> > {
DR> > Inicio:

Mejor no uses el goto, conozco gente que sufre extrañas transformaciones luego de ver códigos que lo usan xD
Para tu programa, encerrar el código en un do-while es suficiente.

DR> > char *j = NULL;
DR> > char *k = "a1b2c3d4";
DR> > system("color 0a");
DR> > system("title Averigua La Pass By Hector 666");
DR> > system("cls");
DR> > printf("\nAVERIGUA LA PASS BY HECTOR 666\n\n");
DR> > printf("Password: ");
DR> > cin >> *j;

Estas intentando guardar la cadena en "j", pero no reservaste memoria para ello. Entonces, intentas sobre escribir no se donde (xq no se donde es la dirección 0 xD) y por eso al ejecutar tu programa poner la contraseña windows lo cierra con el feo mensaje de error.
Entonces, o reservas memoria dinámica para "j" o usas un array estático, supongo que esto último es lo más simple para lo que quieres.

DR> > if (j == k)

Aquí estas comparando los punteros, no las cadenas. Acuerdate que los punteros guardan direcciones de memoria, no carácteres. El puntero "apunta" hacia donde esta la cadena de caracteres, y tu quieres comparar eso. Para comparar strings puedes usar la función strcmp() (http://c.conclase.net/curso/index.php?cap=902f#lib_string) o sino tú mismo te haces una función que los compare.

DR> > {
DR> > printf("\aAcceso Autorizado\n\n");
DR> > printf("Welldone, Cracker\n\n");
DR> > }
DR> > else if (j != k)
DR> > {
DR> > printf("Acceso Denegado\n\n");
DR> > Sleep(500);
DR> > goto Inicio;
DR> > }
DR> > fflush(stdin);
DR> > printf("Pulsa Intro Para Continuar ");
DR> > getchar();
DR> > }
DR> >
DR> Si pudieran explicarme como lograr ese pequeño programa utilizando punteros
DR> y como hacerlo utilizando arrays.
DR> Saludos y gracias de antemano.
DR> -- 

Tonces, si usas punteros tienes q reservar memoria dinámica para ellos, onda:

int main() {

  char *j = new char[10];
  char *k = "a1b2c3d4";

  printf("\nAVERIGUA LA PASS BY HECTOR 666\n\n");
  printf("Password: ");
  scanf("%s", j);

  if(!strcmp(j, k)) printf("\nLe achuntaste");
  else printf("\nNo le achuntaste");
  
  delete[] j;
  getchar();
}

o sinó y más fácil con arreglos:

int main() {

  char j[10];
  char k[] = "a1b2c3d4";

  printf("\nAVERIGUA LA PASS BY HECTOR 666\n\n");
  printf("Password: ");
  scanf("%s", j);

  if(!strcmp(j, k)) printf("\nLe achuntaste");
  else printf("\nNo le achuntaste");
  
  getchar();
}

Ojalá te sirva y no me haya equivocado O.o


Más información sobre la lista de distribución Cconclase