29. april 2003 - 18:55
Der er
12 kommentarer og 1 løsning
hva fejler min funktion? (c)
char * str_replace (char * string,char * search,char *replace) { char * cp = string; char * s1; char * s2; register int z1=0; char *tmp = malloc (strlen(string) - strlen(search) + strlen(replace)+1); if (!*search) return string; while (*cp) { s1 = cp; s2 = search; while ( *s1 && *s2 && !(*s1-*s2) ) s1++, s2++; if (!*s2) { // Replace String attached tmp=strcat(tmp,replace); cp+=strlen(search); tmp=strcat(tmp,cp); strcpy(string,tmp); free(tmp); string=str_replace(string,search,replace); return string; } tmp[z1]=string[z1]; tmp[z1+1]=0; cp++; z1++; } free(tmp); return string; } Den må fejle et eller andet, for den giver en Bus error (Core dumped) (fandt den på nettet)
Annonceindlæg fra FPT Software
29. april 2003 - 19:01
#1
replace.c:10: warning: initialization makes pointer from integer without a cast linie 10 er: char *tmp = malloc (strlen(string) - strlen(search) + strlen(replace)+1);
29. april 2003 - 19:18
#2
char *tmp = (char *)malloc (strlen(string) - strlen(search) + strlen(replace)+1);
29. april 2003 - 19:20
#3
Jeg synes iøvrigt at det er noget grimt kode.
-
Nybegynder
29. april 2003 - 19:22
#4
tror du skal typecaste det returnerede til en char da "void * = malloc (strlen(string) - strlen(search) + strlen(replace)+1);"
29. april 2003 - 19:22
#5
Jeg har selv brugt følgende kode: #include <stdlib.h> #include <string.h> void replace(char *s,char *s1,char *s2) { int i,j; char *tmp; tmp = malloc(strlen(s)+1); strcpy(tmp,s); i = 0; j = 0; while(i<strlen(tmp)) { if(strncmp(tmp+i,s1,strlen(s1))==0) { strcpy(s+j,s2); i=i+strlen(s1); j=j+strlen(s2); } else { s[j]=tmp[i]; i++; j++; } } s[j] = '\0'; return; }
29. april 2003 - 20:01
#6
arne_v dit eksempel, er det C eller C++?
29. april 2003 - 20:04
#7
Det skulle compile med en ren C compiler !
29. april 2003 - 20:24
#8
jeg har prøvet lidt med din funktion.. #include <stdlib.h> #include <string.h> #include <stdio.h> void replace(char *s,char *s1,char *s2) { int i,j; char *tmp; tmp = malloc(strlen(s)+1); strcpy(tmp,s); i = 0; j = 0; while(i<strlen(tmp)) { if(strncmp(tmp+i,s1,strlen(s1))==0) { strcpy(s+j,s2); i=i+strlen(s1); j=j+strlen(s2); } else { s[j]=tmp[i]; i++; j++; } } s[j] = '\0'; return; } int main(void) { char str[40] = "hejsa \n\r"; char ok[40]; ok = replace(str, "\n\r", ""); return 1; } men det giver en fejl.. -bash-2.05b$ cc -o replace replace.c replace.c: In function `main': replace.c:32: void value not ignored as it ought to be -bash-2.05b$
29. april 2003 - 20:30
#9
Det er fordi min variant skal bruges som: int main(void) { char str[40] = "hejsa \n\r"; replace(str, "\n\r", ""); return 1; } og så retter den direkte i str.
29. april 2003 - 20:31
#10
Du kan evt. bruge: int main(void) { char str[40] = "hejsa \n\r"; char ok[40]; strcpy(ok, str); replace(ok, "\n\r", ""); return 1; }
29. april 2003 - 21:23
#11
jeg takker :)
29. april 2003 - 21:25
#12
Det er iøvrigt lidt usædvaneligt med \n\r normalt er det \r\n.
29. april 2003 - 21:27
#13
det er vel en smagssag :)
Kurser inden for grundlæggende programmering