Y estoy teniendo un problema con este código.
Funciones de cadenas
Código C:
Ver original
/*arrays.h*/ #include <stdio.h> int LongCad(char* cad) { int x=0; while(cad[x] != '\0')x++; return x; } int GetCadPos(char* txt, char* cad, int startpos) { int CadLong = LongCad(cad); int TxtLong = LongCad(txt); int i; int x; for (i=startpos; i <= (TxtLong-CadLong); i++) { for (x=0; x < CadLong; x++) tmp[x] = txt[i+x]; if (isSameCad(tmp, cad) == 1) return i; } return -1; } int isSameCad(char* cad1, char* cad2) { int Long1 = LongCad(cad1); int Long2 = LongCad(cad2); if (Long1 != Long2) return 0; int x; for (x=0; x < Long2; x++) { if (cad1[x] != cad2[x]) return 0; } return 1; } char* ReplaceBetween(char* cadena, char* inicio, char* fin, char* remplazar) { int Pos_I = GetCadPos(cadena, inicio, 0)+(LongCad(inicio)-1); int Pos_F = GetCadPos(cadena, fin, Pos_I); int rLong = LongCad(remplazar)-1; int ExtraSize = rLong - (Pos_F-Pos_I); int CadenaLong = LongCad(cadena); int x; for (x=0; x <= Pos_I; x++) NewCad[x] = cadena[x]; int y=x; int i; int z; for (i=0; i <= rLong; i++) NewCad[y++] = remplazar[i]; for (z=Pos_F; z <= CadenaLong; z++) NewCad[y++] = cadena[z]; return NewCad; } char* ConstToCad(const char* cad) { return (char *)(cad); } char* GetCadBetween(char* cadena, char* inicio, char* fin) { int Pos_I = GetCadPos(cadena, inicio, 0)+(LongCad(inicio)-1); int Pos_F = GetCadPos(cadena, fin, Pos_I); // printf("%i\n", Pos_I); int i; int x=0; for (i =Pos_I; i < Pos_F; i++) NewCad[x++] = cadena[i]; return NewCad; }
Main.c
Código C:
Ver original
#include <stdio.h> #include "arrays.h" #ifdef WINDOWS #include <direct.h> #define GetCurrentDir _getcwd #else #include <unistd.h> #define GetCurrentDir getcwd #endif void S_pause() { char c; do { } while (c != '\n'); } int main() { char* cad2; cad2 = ReplaceBetween(ConstToCad("Stealzps<Doom>Hola</Doom>"), ConstToCad("<Doom>"), ConstToCad("</Doom>"), "Soy el Doom 4"); char* cad3; cad3 = GetCadBetween(ConstToCad("Stealzps<Doom>Hola</Doom>"), ConstToCad("<Doom>"), ConstToCad("</Doom>")); S_pause(); return 0; }
Salida:
Stealzps<Doom>Soy el Doom 4</Doom>
y luego el programa se crashea o me devuelve
lzps<Doom>Soy el Doom 4
Definitivamente esta mal la funcion GetCadPos., pero no se en que.
Si pudieran ayudarme se los agradecería mucho :D