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 tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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