Error en programa c++

Iniciado por z_ane_666, 9 Diciembre 2010, 00:12 AM

0 Miembros y 1 Visitante están viendo este tema.

z_ane_666


Antes que nada , buenos dias

Me baje este codigo(hecho para turbo c++ 3.00), lo compile en dicho programa y funciona bien , pero cuando lo pase a codeblocks(usa gnu gcc compiler),compilo bien, pero al ejecutar y poner un caracter de busqueda(El programa es para buscar caracteres en un archivo) la aplicacion falla y sale la ventana de que ha encontrado un problema y debe cerrarse

¿Que estaré haciendo mal? ¿Que hay que cambiar? Espero que puedan ayudarme

Codigo

#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <fcntl.h>
#include <process.h>
#include <sys\stat.h>
#include <string.h>

int buscar ( char *archivo, char *cadena );
int encontrar_ocurrencias( char *cadena, char *subcadena );

int main(void)
{
    char *archivo = "C:\\readme.TXT";
    char *cadena;

    printf("Ingrese cadena a buscar: ");
    gets(cadena);

    int resul = buscar(archivo, cadena);

    if(resul==0)
      printf("No se ha encontrado la cadena\n");
    else
      printf("Coincidencias encontradas: %d\n", resul);

    system("PAUSE");
    return 0;
}

int buscar ( char *archivo, char *cadena )
{
   char ch;
   char *texto;
   int controlador, i;

   /* Abre archivo */
   if ((controlador = open(archivo, O_RDONLY | O_BINARY, S_IWRITE |

S_IREAD)) == -1)
   {
      printf("Error al abrir archivo\n");
      exit(1);
   }

   /* Lee el archivo y va colocando el contenido en la variable: texto */
   texto[0] = '\0';
   for(i=0; !eof(controlador); i++)
   {
      read(controlador, &ch, 1);
      texto[i] = ch;
   }
   texto[i]='\0';

   /* Cierra archivo */
   close (controlador);

   return encontrar_ocurrencias(texto, cadena);
}

int encontrar_ocurrencias( char *cadena, char *subcadena )
{
   char *tmp = cadena;
   char *pdest;
   int ocur = 0, pos;
   int len = strlen(subcadena);
   while(1)
   {
      pdest = strstr( tmp, subcadena );
      if( !pdest ) break;
      pos = pdest - tmp;
      tmp += pos + len;
      ocur++;
   }
   return ocur;
}

winroot

#1
Buenas!
Bien, aunque no programo en c...
trata de cambiar los char* por char[tan]
Cuando haces:

texto[0]='\0';
/...el for

A mi me tira tmb error, y me imagino que es porque char* es un puntero a cadena constante.
Espero que te sirva de algo ^^.
Abrazo
Edit:
Porqué el título dice c++?
Y esto?
Código (cpp) [Seleccionar]

      tmp += pos + len;

No, no es la clase string, no puedes usar +cadena me parece...
Hay funciones en string.h para ese tipo de cosas, no tengo idea si será strncat, pero bueno ^^.
Para copiar de una cadena a la otra usa strncpy.
Un saludo
Mi blog sobre programación y seguridad informática:
http://win-root.blogspot.com