[ANSI C] Zamiana w stringu

0

Probowalem zbudowac funkce, ktora w stringu s1 znajdowala by stringi s2 i zamieniala je na stringi s3.:

int strrep(char *s1, const char *s2, const char *s3)
{
  int l1;
  int l2;
  int l3;
  char *p = s1;
  
  l1 = strlen(s1);
  l2 = strlen(s2);
  l3 = strlen(s3);
  while (*p != '\0') {
    if (!strncmp(p, s2, l2)) {
      memmove(p + l2, p + l3, l1 - (p - s1) - l2);
      memcpy(s3, p, l3); /* tego kompilator nie chce skompilowac*/
      s1[l1 + (l3 - l2)] = '\0';
      p += l3;
    } else p++;
  }  
}

Wie ktos moze dlaczego kompilator nie chce skompilowac mojego kodu?

</cpp>
0

Jesli to bylby kompilator C to powinno to przejsc, natomiast gdy kompilujesz to jakims kompilatorem C++ (i wydaje mi sie, ze tak wlasnie robisz) to prawdopodobny blad wystepuje podczas przekazania argumentu s3, ktory jest wskaznikiem do stalej, a wymagany argument funkcji nie jest stala, moze jakies rzutowanie pomoze.

0

Jak już coś to powinno być memcpy((void*)s3, p, l3);, poza tym funkcja powinna zwrócić wartość. Nie sprawdzałem poprawności funkcji, ale siękompiluje :P

0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* strreplace(char* st,char* ol,char* nw,int all){
  char* p=st;
  int j=strlen(ol),k=strlen(nw),l=strlen(st);
  int i=k-j;
  int o=1;
  while((p=strstr(p,ol))&& o){
    o=all;
    int m=(l+=i);
    int n=j;
    if(i>0)while(m>j)p[m--]=p[m-i];
      else while(m>=n)p[(n++)+i]=p[n];
    }
    strncpy(p++,nw,k);
  }
  return st;
}

main(){
  printf("%s\n",strreplace("lala ma kota\0      ","ala","alunia",1)); 
  printf("%s\n",strreplace("pochwalony ...","ch","",1));
  printf("%s\n",strreplace("1234123412abc","1","0",1));
  printf("%s\n",strreplace("1234123412abc","1","0",0));
  printf("%s\n",strreplace("abcdefg","def","123",0));
  return 0;
}

Azeby w pierwszym wywołaniu dluzszy wstawiony ciag nie namieszał w pamieci jest namieszane troche w ciągu znaków : "\0" wskazuje koniec ciągu, ale nie koniec przydzielonego obszaru.

// Pewnie da się wywalić kilka zmiennych z tej funkcji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1