D4ve
2006-05-21, 00:07:48
Hallo,
ich sitze grade an einem Problem: Ich will einen String an eine Funktion übergeben und dort den Inhalt überschreiben. Leider wird der String aber nur innerhalb der Funktion überschrieben, nicht aber in der main(), dort bleibt der Inhalt so wie vorher.
Das Listing:
#include <stdio.h>
#include <string.h>
#define TEXT "Teststring1=Ein Teststring/Teststring2=Ein anderer Teststring"
char *splitstr(char *oldstr){
int pos1=strcspn(oldstr,"=")+1;
int pos2=strcspn(oldstr,"/");
int i,j;
char *newstr=(char *)malloc(pos2-pos1+1); /*der Substring*/
char *buf=(char *)malloc(strlen(oldstr)-pos2+1); /*Pufferstring*/
/*Part zwischen Pos1 und 2 in newstring schreiben*/
for(i=pos1,j=0;i<pos2;i++,j++)
newstr[j]=oldstr[i];
newstr[j]='\0';
/*Reststring in Puffer schreiben*/
for(i=0;oldstr[pos2]!='\0';pos2++,i++)
buf[i]=oldstr[pos2+1];
/*free(oldstr);*/ /*--> FÜHRT ZU FEHLER*/
oldstr=(char *)malloc(strlen(buf)+1);
oldstr=buf;
/*Testausgabe der einzelnen Stringinhalte*/
printf("\n%s\n%s\n%s",newstr,buf,oldstr);
free(buf);
return newstr;
}
void main() {
char *str;
char *substr1;
str=(char *)malloc(strlen(TEXT)+1);
sprintf(str,"%s",TEXT);
substr1=splitstr(str);
printf("\n str nach splitstr():\n%s",str);/*sieht genauso aus wie vorher*/
printf("\nSubstring1:\n%s",substr1);
getc(stdin);
}
Im Prinzip wird ein String an die splitstr-Funktion übergeben (str=oldstr), nach den Zeichen '=' und '/' aufgetrennt und soll dann neu geschrieben werden. Das return gibt nur den von den Zeichen eingegrenzten Teil zurück.
In der main() will ich den String also in Substrings zerlegen (substr1=splitstr(str); substr2=splitstr(der neue verkürzte String); ).
Aber in der splitstr-Funktion sorgt der Aufruf free(oldstring) für einen Absturz.
Ansich greife ich ja direkt auf den Zeiger zu, also müsste es doch auch klappen.
Ich wäre für einen Tipp sehr dankbar.
ich sitze grade an einem Problem: Ich will einen String an eine Funktion übergeben und dort den Inhalt überschreiben. Leider wird der String aber nur innerhalb der Funktion überschrieben, nicht aber in der main(), dort bleibt der Inhalt so wie vorher.
Das Listing:
#include <stdio.h>
#include <string.h>
#define TEXT "Teststring1=Ein Teststring/Teststring2=Ein anderer Teststring"
char *splitstr(char *oldstr){
int pos1=strcspn(oldstr,"=")+1;
int pos2=strcspn(oldstr,"/");
int i,j;
char *newstr=(char *)malloc(pos2-pos1+1); /*der Substring*/
char *buf=(char *)malloc(strlen(oldstr)-pos2+1); /*Pufferstring*/
/*Part zwischen Pos1 und 2 in newstring schreiben*/
for(i=pos1,j=0;i<pos2;i++,j++)
newstr[j]=oldstr[i];
newstr[j]='\0';
/*Reststring in Puffer schreiben*/
for(i=0;oldstr[pos2]!='\0';pos2++,i++)
buf[i]=oldstr[pos2+1];
/*free(oldstr);*/ /*--> FÜHRT ZU FEHLER*/
oldstr=(char *)malloc(strlen(buf)+1);
oldstr=buf;
/*Testausgabe der einzelnen Stringinhalte*/
printf("\n%s\n%s\n%s",newstr,buf,oldstr);
free(buf);
return newstr;
}
void main() {
char *str;
char *substr1;
str=(char *)malloc(strlen(TEXT)+1);
sprintf(str,"%s",TEXT);
substr1=splitstr(str);
printf("\n str nach splitstr():\n%s",str);/*sieht genauso aus wie vorher*/
printf("\nSubstring1:\n%s",substr1);
getc(stdin);
}
Im Prinzip wird ein String an die splitstr-Funktion übergeben (str=oldstr), nach den Zeichen '=' und '/' aufgetrennt und soll dann neu geschrieben werden. Das return gibt nur den von den Zeichen eingegrenzten Teil zurück.
In der main() will ich den String also in Substrings zerlegen (substr1=splitstr(str); substr2=splitstr(der neue verkürzte String); ).
Aber in der splitstr-Funktion sorgt der Aufruf free(oldstring) für einen Absturz.
Ansich greife ich ja direkt auf den Zeiger zu, also müsste es doch auch klappen.
Ich wäre für einen Tipp sehr dankbar.