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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas con el compilador [Solucionado]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con el compilador [Solucionado]  (Leído 6,807 veces)
DaniekL

Desconectado Desconectado

Mensajes: 14



Ver Perfil
Problemas con el compilador [Solucionado]
« en: 8 Abril 2012, 23:56 pm »

Hola.

Verán, estoy haciendo un programa que lee una lista de palabras y las compara con una lista de letras.
Aquí de lo muestro

Código
  1. //drawsomething.c
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #define PATH = "/home/daniel/.drawsom/wordlist" //El PATH del fichero
  6.  
  7. //Funcion que muestra el uso y sale
  8. void usage(char *s) {
  9. printf("\t-----Usage-----\n\nTo add a word use: %s -a <the_word>\nTo find a word use: %s <length_of_the_word> <the_possible_letter>\n", s, s);
  10. exit(0);
  11. }
  12.  
  13. //Añade una nueva palabra a la lista
  14. void add(char *word) {
  15. FILE *wordlist;
  16. wordlist = fopen(PATH, "w");
  17. if(wordlist == NULL) {
  18. printf("[Fatal Error!!] while opening wordfile\nAborting...\n");
  19. exit(0);
  20. }
  21. fwrite(word, sizeof(word), 1, wordlist);
  22. fclose(wordlist);
  23. }
  24. //Funcióm que busca la palabra
  25. void find(int tamano, char *l) {
  26. FILE *wordlist;
  27. char letters[13], *aux;
  28. int check, i; /*check comprueba si la palabra leida contiene las letras que pasamos como argumento.
  29.                       Si check es mayor o igual que el tamaño de la palabra, esta cumple las caracteristicas*/
  30. strcpy(letters, l);
  31. letters[12] = '\0';
  32. wordlist = fopen(PATH, "r");
  33. if(wordlist == NULL) {
  34. printf("[Fatal Error!!] while opening wordfile\nAborting...\n");
  35. exit(0);
  36. }
  37. aux = fgets(NULL, 15, wordlist);
  38. while(aux != NULL) {
  39. if(strlen(aux) == tamano) {
  40. for(i = 0; i < 12; i++) {
  41. if(strstr(aux, letters[i]) != NULL) {
  42. check++;
  43. }
  44. }
  45. if(check >= tamano) {
  46. printf("%s\n", aux);
  47. }
  48. }
  49. aux = fgets(NULL, 15, wordlist);
  50. }
  51. }
  52.  
  53. int main(int argc, char *argv[]) {
  54. if(argc < 3)
  55. usage(argv[0]);
  56. if(strcmp(argv[1], "-a"))
  57. add(argv[2]);
  58. else
  59. find(atoi(argv[1]), argv[2]);
  60. return 0;
  61. }

El problema viene cuando lo compilo. Uso el gcc y me arroja este resultado:
Código:
drawsomething.c: En la función ‘add’:
drawsomething.c:13:19: error: expected expression before ‘=’ token
drawsomething.c: En la función ‘find’:
drawsomething.c:28:19: error: expected expression before ‘=’ token
drawsomething.c:37:5: aviso: el paso del argumento 2 de ‘strstr’ crea un puntero desde un entero sin una conversión [activado por defecto]
/usr/include/string.h:342:14: nota: se esperaba ‘const char *’ pero el argumento es de tipo ‘char’

He revisado los errores pero no veo el fallo y como el compilador lleva tiempo haciendo cosas raras pues a lo mejor es un fallo (sin ofender al gran Stallman   :laugh: :laugh: :laugh:) por que ademas, sale que tengo errores en la libreria string.h.

Si alguien tiene la solución al problema (que me jugaría el brazo a que es una chorrada) le agradeceía mucho que me ayudase.  ;-)

Gracias. Un abrazo.


« Última modificación: 9 Abril 2012, 23:23 pm por DaniekL » En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Problemas con el compilador
« Respuesta #1 en: 9 Abril 2012, 00:32 am »

¡Buenas!

El error esta aqui:
Código
  1. #define PATH = "/home/daniel/.drawsom/wordlist"
  2.  

Te sobra el =

Deberia ser:
Código
  1. #define PATH = "/home/daniel/.drawsom/wordlist"
  2.  

Cuando utilizas #define para definir constantes se hace asi:

#define CONSTANTE VALOR

no

#define CONSTANTE = VALOR

¡Saludos!


En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Beakman

Desconectado Desconectado

Mensajes: 190



Ver Perfil WWW
Re: Problemas con el compilador
« Respuesta #2 en: 9 Abril 2012, 00:36 am »

En vez de poner esto:
Código
  1. #define PATH = "/home/daniel/.drawsom/wordlist" //El PATH del fichero

Poné esto:
Código
  1. #define PATH "/home/daniel/.drawsom/wordlist" //El PATH del fichero

Y acá:
Código
  1. if( strstr( aux, letters[ i ] ) != NULL) {

La función strstr tiene que recibir dos cadenas, y vos le estás pasando una cadena y un carácter. Tenés que hacer una cadena con ese carácter y el '\0'.
En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Problemas con el compilador
« Respuesta #3 en: 9 Abril 2012, 00:39 am »

XD, es cierto, mira que lo he dicho, pero se me ha olvidado quitar el =. Hay sueño...
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
Beakman

Desconectado Desconectado

Mensajes: 190



Ver Perfil WWW
Re: Problemas con el compilador
« Respuesta #4 en: 9 Abril 2012, 00:43 am »

Jaja. Yo llegué tarde.
En línea

soyloqbuskas

Desconectado Desconectado

Mensajes: 219


¡El conocimiento es de todos!


Ver Perfil
Re: Problemas con el compilador
« Respuesta #5 en: 9 Abril 2012, 00:44 am »

¡Buenas DaniekL!

Ya he dado con tus problemas.

El 1º esta en la definicion del PATH. No puedes definir el PATH = VALOR, lo tienes que definir como un char *.

Cambia esta linea:
Código
  1. #define PATH = "/home/daniel/.drawsom/wordlist" //El PATH del fichero

Por esta otra:
Código
  1. char * PATH = "/home/daniel/.drawsom/wordlist"; //El PATH del fichero

Y el 2º error lo tienes en el strtstr(). Esta funcion se define de esta manera:
Citar
char *strstr(const char *s1, const char *s2);

Siendo s1 y s2 2 cadenas de caracteres, y lo que hace es buscarte la cadena s1 dentro de la cadena s2. Por tanto no hace falta que recorrars tu la cadena s2 (s2).

Por tanto, tu funcion find() ahora queda asi:
Código
  1. //Funcióm que busca la palabra
  2. void find(int tamano, char *l) {
  3.        FILE *wordlist;
  4.        char letters[13], *aux;
  5.        int check, i; /*check comprueba si la palabra leida contiene las letras que pasamos como argumento.
  6.                       Si check es mayor o igual que el tamaño de la palabra, esta cumple las caracteristicas*/
  7.        strcpy(letters, l);
  8.        letters[12] = '\0';
  9.        wordlist = fopen(PATH, "r");
  10.        if(wordlist == NULL) {
  11.                printf("[Fatal Error!!] while opening wordfile\nAborting...\n");
  12.                exit(0);
  13.        }
  14.        aux = fgets(NULL, 15, wordlist);
  15.        while(aux != NULL) {
  16.                if(strlen(aux) == tamano) { // quitamos el for()
  17.                        if(strstr(aux, letters) != NULL) { //sustituimos el puntero a caracter letters[i] por letters
  18.                                  check++;
  19.                        }
  20.  
  21.                        if(check >= tamano) {
  22.                                printf("%s\n", aux);
  23.                        }
  24.                }
  25.                aux = fgets(NULL, 15, wordlist);
  26.        }
  27.  
  28.  

Un saludo.
En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
DaniekL

Desconectado Desconectado

Mensajes: 14



Ver Perfil
Re: Problemas con el compilador
« Respuesta #6 en: 9 Abril 2012, 23:10 pm »

Ostias, es verdad. :xD No me extraña que tuviese ese error, llevaba siglos sin usar #define y respecto al fallo en string.h. Porque no se que puede ser...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problemas con fechas(Solucionado)
Programación Visual Basic
Zeroql 1 1,189 Último mensaje 30 Noviembre 2007, 20:03 pm
por Zeroql
Problemas con shell (Solucionado)
Programación Visual Basic
Zeroql 3 1,651 Último mensaje 11 Febrero 2008, 22:50 pm
por ~~
problemas con el include (Solucionado)
PHP
Zeroql 3 1,674 Último mensaje 18 Junio 2008, 21:49 pm
por Zeroql
[solucionado]problemas con mid vb.net
.NET (C#, VB.NET, ASP)
CH4ØZ 3 4,866 Último mensaje 1 Febrero 2011, 01:43 am
por CH4ØZ
(SOLUCIONADO) Problemas con DIV
PHP
dimitrix 0 1,738 Último mensaje 5 Abril 2012, 16:57 pm
por dimitrix
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines