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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Mensajes
Páginas: 1 ... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ... 45
181  Programación / Programación C/C++ / (Consulta) Punteros a punteros en C en: 19 Julio 2016, 11:18 am
Hola, muy buenas. Ante todo gracias por pasarlos, y por leer mi duda. El problema que tengo es con el siguiente código:

Código
  1. void funcion(const char * const * cadenas) {
  2. cadenas = 0xFFFFFFFF;
  3. }

Si yo compilo este código, no me dará un error como tal (simplemente una advertencia). Lo que me resulta raro es que si este código compila, significa que el último puntero es el que está tomando prioridad, porque el const opera sobre lo que tiene a su izquierda (a no ser que esté a la izquierda del todo, que en cuyo caso, opera sobre lo que tiene a la derecha). Es decir:

Código
  1. void funcion(const char * const * cadenas)
  2.               ^

Este const opera sobre el char

Código
  1. void funcion(const char * const * cadenas)
  2.                        ^   ^

Este const opera sobre el puntero señalado

Entones de esto deducimos que el único puntero no constante es el último. Al poder modificar en la función el valor del puntero dado, eso quiere decir que el último puntero es el que está tomando prioridad, mientras que debería tomar prioridad el primer puntero, es decir, este:

Código
  1. void funcion(const char * const * cadenas)
  2.                        ^

La duda final podría ser: por lo visto no entiendo/sé muy bien las reglas de prioridad, porque yo creía que al ser el mismo operador (*), tenía prioridad el de más a la izquierda, pero según lo expuesto, y en este caso, tiene más prioridad el de más a la derecha...
182  Programación / Programación C/C++ / Re: Archivo de texto a un vector en: 17 Julio 2016, 16:08 pm
Sinceramente, se me escapan demasiados aspectos de la lógica de este programa, pero intentaré mostrar lo que me parece que te pasa:
  • Estás suponiendo que has llenado el arreglo Leer.contenido entero con el archivo. Entonces, cuando no se llena al completo, la memoria que no se llena tiene valores 'basura'. A lo que quiero llegar es que si no se leen 1000 caracteres del archivo, el arreglo no se llena al completo y por lo tanto a la hora de contar números es posible que te muestre más de los que hay. Para solucionar esto, tendrías que guardar cuántos elementos se han almacenado en el arreglo y después, en el for del método números, compruebas hasta ese límite.
  • En los demás métodos ni siquiera haces lo que en el método 'numeros'. Tendrías que aplicar lo mismo que te he dicho en la aclaración anterior.
  • Esto no sé si será un error, pero por si acaso, lo comentaré (porque es probable que sea un error). Lo que retorna el método 'cargar' es el primer carácter de la cadena. Lo que te aconsejo hacer es que el método no acepte ningún argumento y que tomes los datos del arreglo de la clase, teniendo en cuenta la cantidad de caracteres leídos:

Código
  1. int Leer::numeros() { //determinamos si son numeros
  2. for(int i=0; i < caracteres_leidos; i++) {
  3. if(isdigit(this->contenido[i])) // El this-> no es obligatorio
  4. cnum++;
  5. }
  6. return(cnum);
  7. }
    [/li]

Es posible que haya más errores que yo no haya visto, pero al menos aclaro algunas dudas
183  Programación / Programación C/C++ / Re: Ayuda con este pequeño código de funciones logicas en: 11 Julio 2016, 21:21 pm
Si vas a poner más dudas, te aconsejo (si quieres seguir recibiendo ayuda) que uses las etiquetas GeSHI, para que así el código sea más legible. Para usarlas, en el panel del editor, hay una parte donde pone 'Código GeSHI', pulsas y te sale una lista de lenguajes. Seleccionas el que quieras y pones tu código
184  Programación / Programación C/C++ / Re: Ayuda con este pequeño código de funciones logicas en: 11 Julio 2016, 20:10 pm
No lo he compilado, pero me parece que esos dos errores se inician en que has declarado un arreglo, cuando supongo querías declarar un carácter:

Código
  1. char letra; // Antes era char letra[1]
185  Programación / Programación C/C++ / Re: (Consulta) fprintf imprime carácter de fin de archivo (-1) en: 2 Julio 2016, 12:48 pm
Si, ese es el tema de donde saqué el ejercicio :P
186  Programación / Programación C/C++ / Re: [C] ¿Por qué esto no desborda? Malloc en: 2 Julio 2016, 11:43 am
Cuando ejecutas un programa, las variables se asignan a una parte de la memoria, pero las variables no son lo único que se almacenan. También se almacena código que pertenece a tu programa. Al salirte del rango asignado es posible que modifiques parte de tu código y por lo tanto tengas errores inesperados, mas no se producen errores en el 100% de los casos. En programas más complejos es donde se suele complicar la cosa
187  Programación / Programación C/C++ / Re: (Consulta) fprintf imprime carácter de fin de archivo (-1) en: 2 Julio 2016, 10:46 am
Vaaale. Ya sé dónde está el error :DD Era, por así decirlo, un error de lógica. No di información suficiente, porque pensé que no era necesario enseñar el contenido de la función, pero al final el problema estaba en la función :S No voy a poner el código por no spoilear a quien haga el ejercicio, pero diré que el problema no era por la conversión que mencionó MAFUS, sino que estaba poniendo el carácter de final de cadena (carácter nulo) en una posición superior a la que le correspondía. No tengo ni idea de por qué este error se produce solo con MinGW-w64, pero se soluciona al poner el fragmento de código puesto... Misterios de la vida :P

En fin, muchas gracias :D
188  Programación / Programación C/C++ / Re: (Consulta) fprintf imprime carácter de fin de archivo (-1) en: 2 Julio 2016, 10:28 am
Es un pequeño truco que he usado. Aunque en la función main es un arreglo bidimensional de punteros a char, la función pide un arreglo unidimensional. Esta conversión la puedo hacer así por como se organiza en el programa la memoria. Si fuera un arreglo dinámico bidimensional, no funcionaría si no se inicializa de una forma concreta.
189  Programación / Programación C/C++ / (Consulta) fprintf imprime carácter de fin de archivo (-1) en: 2 Julio 2016, 08:43 am
Hola, muy buenas. No estoy seguro de por qué pasa el problema, así que os vengo a preguntar. El caso es que vi una pregunta en este foro sobre C y quise crear un código para ver si yo sería capaz de hacerlo (tengo que hacer ejercicios xD). El caso es que el programa parece que realiza su cometido salvo por un aspecto: al final, al imprimir el resultado, a parte de imprimirse el resultado, se imprime un carácter de fin de archivo (0xFF o -1). Código:

Código
  1. #include <string.h>
  2. #include <limits.h>
  3. #include <stdio.h>
  4. #include <ctype.h>
  5.  
  6. void get_longest_prefix(char dest[], char *strings[], unsigned int num_strings);
  7.  
  8. int main() {
  9. char *strings[3][2] = {{"Planeta", "Platano"}, {"planetoide", "Platino"}, {"planetario", "Placenta"}};
  10. char result[16];
  11.  
  12. get_longest_prefix(result, (char **)strings, sizeof(strings)/sizeof(char *));
  13.  
  14. /*unsigned int i;
  15. for(i = 0; i < 16; i++)
  16. fprintf(stdout, "%u\n", result[i]);*/
  17.  
  18. fprintf(stdout, "Longest common prefix: %s", result);
  19.  
  20. fgetc(stdin);
  21. return 0;
  22. }
  23.  
  24. void get_longest_prefix(char dest[], char *strings[], unsigned int num_strings) {
  25. // No pongo el contenido de la función para no spoilear al que preguntó sobre  el ejercicio xD
  26. }

Salida:
Código:
Longest common prefix: pla _
NOTA: El guión simboliza el guión de la consola, eso no se imprime por el programa

Dense cuenta de que se imprime un espacio entre el último carácter y el guión de la consola.

Lo más extraño de todo es que si descomento el fragmento de código que me muestra la cadena en su valor numérico, este carácter de fin de archivo no se imprime. Si descomento el fragmento la salida queda:

Código:
112
108
97
0
0
0
0
0
5
0
0
0
0
0
0
0
Longest common prefix: pla_

Como ven, ahora no hay espacio entre la última a y el guión.

_______________________
NOTA ACLARATORIA. Sé que es un carácter de fin de archivo porque copié de la consola el carácter y lo pegué en un documento con la misma codificación que la consola (OEM-850), y luego abrí el archivo con HxD (visor hexadecimal) y vi que el carácter era 0xFF
190  Programación / Programación C/C++ / Re: definir los argumentos de una función de manera dinamica en: 2 Julio 2016, 07:44 am
Si que hay una manera, pero es muy complicada... lo que tienes que hacer es... lo mismo que en la función main XDD (Es broma lo de difícil). Aquí tienes un ejemplo:

Código
  1. #include <stdio.h>
  2.  
  3. void procesar_argumentos(int num_argumentos, char *argumentos[]);
  4.  
  5. int main() {
  6.    char *argumentos[3] = {"Argumento1", "Argumento2", "Argumento3"};
  7.  
  8.    procesar_argumentos(3, argumentos); // 3 porque es el número de elementos
  9.  
  10.    return 0;
  11. }
  12.  
  13. void procesar_argumentos(int num_argumentos, char *argumentos[]) {
  14.    int i;
  15.  
  16.    for(i = 0; i < num_argumentos; i++)
  17.        fprintf(stdout, "%s\n", argumentos[i]);
  18. }
Páginas: 1 ... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ... 45
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines