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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 ... 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 [88] 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 ... 161
871  Programación / Programación C/C++ / Re: Por que este programa corre bien de esta forma y no de esta otra C en: 28 Abril 2017, 11:28 am
Para que veas porqué ha fallado pon el siguiente código:
Código
  1. int strindex(char s[], char t[])
  2. {
  3.    int i, j, k;
  4.  
  5.    for (i = strlen(s)-1;  i>=0; i--)
  6.    {
  7.        for (j=i, k=strlen(t)-1; s[j]==t[k]; j--, k--) {
  8.            printf("[ %c -- %c ] [ %i -- %i ]\n", s[j], t[k], j, k);
  9.        }
  10.        printf("<<< k = %i>>>\n", k);
  11.        if (k == 0 )
  12.            return i;
  13.    }
  14.  
  15.    return -1;
  16. }

Cuándo el segundo bucle llega al final k se decrementa así que cuándo llegas al if(k == 0) k tiene el valor -1.
872  Programación / Programación C/C++ / Re: Arduino Regalado y Nuevo en el mundo de la programación en: 28 Abril 2017, 10:19 am
Te recomiendo te pases por esta web http://www.prometec.net/modulo-1/
Va desde lo más básico hasta proyectos enteros.
873  Programación / Programación C/C++ / Re: Plantilla para trabajar con archivos en lenguaje C. en: 28 Abril 2017, 10:09 am
Eso quiere decir que la función no acepta argumentos y no devuelve ningún dato. Es lo mismo que void mensaje(). Es una cuestión de estilos.
874  Programación / Programación C/C++ / Re: Quitar ciertos elementos de un Array en: 28 Abril 2017, 10:06 am
Existe el bucle pero no está reflejado en el código. luisito45 dice:
Citar
El script obviamente no esta completo pero [...]
875  Programación / Programación C/C++ / Re: Quitar ciertos elementos de un Array en: 27 Abril 2017, 18:22 pm
Debes venir de algún lenguaje de alto nivel, por cómo veo cómo tratas el if y lo llamas script.
Todas las opciones de una decisión tienen que estar escritas en su forma larga, y sí, es repetir mucho código.
En tu caso sería:
Código:
if ( frase[n] != ' ' &&
     frase[n] != ',' &&
     frase[n] != '?' &&
     frase[n] != '¿' &&
     frase[n] != '!' &&
     frase[n] != '¡' )

Por cierto & es el operador AND a nivel de bits. El operador lógico AND para todo el dato es &&.
876  Programación / Programación C/C++ / Re: El juego del ahorcado! en: 27 Abril 2017, 18:11 pm
Siguen siendo problemas con la memoria. En este caso punteros y paso de argumentos por referencia, que no existe en C pero se emula.
Un poco de teoría:
La memoria de un ordenador el lineal y se accede a ella dando al controlador de memoria, que en verdad es un demultiplexor, un número entero sin signo del mismo tamaño en bits que el controlador puede aceptar.
Por otra parte la memoria la maneja el sistema operativo. Éste es el encargado de ofrecer una porción para que tu programa instale en ella su código y sus datos y, por razones de seguridad y para que no puedas interferir con otros programas y servicios del sistema, vigila que tu programa no salga de esa porción asignada.
C es un lenguaje de nivel medio y eso significa que es de tan bajo nivel que el programador puede indicarle qué posición de memoria exacta quiere leer o escribir pero al mismo tiempo es de tan alto nivel que tiene estructuras para no tener que vérselas con saltos manuales y puede encerrar regiones de código en funciones que hacen todo el trabajo de la pila por él.
Los punteros de C son los encargados de guardar las direcciones de memoria a las que queremos acceder.

[ Ya casi termino ]

Todos los argumentos de las funciones se pasan por valor. Eso quiere decir que el dato que recibe la función es una copia del original y por tanto toda modificación que se haga dentro de la función de ese dato sólo afecta a la función. Quien la ha llamado no notará que haya pasado nada.
Para poder cambiar dicho dato hay que pasar la dirección de memoria de éste, así lo que se ha copiado es dicha dirección por tanto dentro de la función está el mismo puntero y se puede acceder y cambiar el contenido de la memoria. Cambiando el contenido de la memoria dentro de la función también se cambia para todo el sistema, así lo que se haga dentro de la función también lo ven desde fuera. Por cierto, el operador que devuelve la dirección de memoria de un dato es el ampersand ( & ).

[Juntándolo todo y resolviendo el error]

La función scanf, para simplificar y en tu contexto, toma un dato del buffer de entrada del mismo formato que le has indicado en la cadena de argumentos, un entero, y lo deposita en la variable que le has indicado.
Pero la función espera un puntero a la variable, por lo que te he expuesto anteriormente, es decir una dirección de memoria válida dentro de tu programa. Al darle directamente choice le dices a scanf que el contenido de choice, vete a saber cuál es, es la dirección de memoria en la que debe depositar lo recogido desde el buffer de entrada. Cómo choice puede contener cualquier cosa lo más seguro es que sea tratado como una dirección de memoria que apunta a un lugar fuera del espacio de tu programa y el sistema operativo, para que no se causen males mayores, lo aborta inmediatamente.
Por tanto debes darle a scanf la dirección de memoria de choice para que ponga el dato en tu variable.
Así el código que debes poner es
Código:
scanf("%i", &choice);
877  Programación / Programación C/C++ / Re: Utilizar recursos graficos con PTY Linux C en: 27 Abril 2017, 15:41 pm
El penúltimo argumento de openpty es const struct termios *termp. Con ella controlas el comportamiento del terminal. A lo mejor tu solución está por aquí.
878  Programación / Programación C/C++ / Re: cadena de caracteres en: 27 Abril 2017, 12:01 pm
Este último código tiene pérdida de memoria al perder la referencia a cadena. Hay que pensar que es memoria dinámica y hay que liberarla a mano.
879  Programación / Programación C/C++ / Re: El juego del ahorcado! en: 26 Abril 2017, 12:52 pm
Lo escribo desde el móvil así que voy a simplificar.
Tu dices:
char palabras[5] = "CASCO"
Ahora como está entrecomillado hay que pensar hay el carácter nulo.
Así que tu array queda
#1: palabras[0] = 'C'
#2: palabras[1] = 'A'
...
#5: palabras[4] = 'O'

Y fuera de los límites de array está el caracter nulo.

Esto es peligroso porqué el programa sí copia dicho caracter nulo pero no tiene un espacio reservado. Eso significa que otra vatiable que tenga asignada esa zona de memoria te sobreescribirá ese caracter nulo y si ese es un valor distinto a 0 las funciones encargadas de manejar cadenas no encontrarán el final de esta donde tu lo esperas. Que es lo que te pasa. Así como lo tienes una cadena machaca el caracter nulo de la anterior por tanto printf escribe toda la ristra de palabras que hay en el array.
880  Programación / Programación C/C++ / Re: Ayuda a corregir programa en C++ Listas enlazadas en: 26 Abril 2017, 12:08 pm
En algunas funciones te olvidas de recorrer la lista y en el main tienes un gran problema en la línea de definición de variables.
Páginas: 1 ... 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 [88] 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 ... 161
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines