複数の文字区切り文字で文字列を分割するコードを作成しました。
この関数を初めて呼び出すときは問題なく動作しています
しかし、2回目に呼び出すと、不要な記号を含む正しい単語が返されます。
この問題は、バッファをクリアしていないために発生していると思います。多くのことを試しましたが、これを解決できません。この問題を解決するのを手伝ってください。
char **split(char *phrase, char *delimiter) {
int i = 0;
char **arraylist= malloc(10 *sizeof(char *));
char *loc1=NULL;
char *loc=NULL;
loc1 = phrase;
while (loc1 != NULL) {
loc = strstr(loc1, delimiter);
if (loc == NULL) {
arraylist[i]=malloc(sizeof(loc1));
arraylist[i]=loc1;
break;
}
char *buf = malloc(sizeof(char) * 256); // memory for 256 char
int length = strlen(delimiter);
strncpy(buf, loc1, loc-loc1);
arraylist[i]=malloc(sizeof(buf));
arraylist[i]=buf;
i++;
loc = loc+length;
loc1 = loc;
}
return arraylist;
}
この関数を初めて呼び出した
char **splitdetails = split("100000000<delimit>0<delimit>hellooo" , "<delimit>");
それは与えます
splitdetails[0]=100000000
splitdetails[1]=0
splitdetails[2]=hellooo
しかし、私はこれに二度目に電話しました
char **splitdetails = split("20000000<delimit>10<delimit>testing" , "<delimit>");
splitdetails[0]=20000000��������������������������
splitdetails[1]=10����
splitdetails[2]=testing
アップデート:-
@fatelerror に感謝します。コードを次のように変更しました
char** split(char *phrase, char *delimiter) {
int i = 0;
char **arraylist = malloc(10 *sizeof(char *));
char *loc1=NULL;
char *loc=NULL;
loc1 = phrase;
while (loc1 != NULL) {
loc = strstr(loc1, delimiter);
if (loc == NULL) {
arraylist[i]=malloc(strlen(loc1) + 1);
strcpy(arraylist[i], loc1);
break;
}
char *buf = malloc(sizeof(char) * 256); // memory for 256 char
int length = strlen(delimiter);
strncpy(buf, loc1, loc-loc1);
buf[loc - loc1] = '\0';
arraylist[i]=malloc(strlen(buf));
strcpy(arraylist[i], buf);
i++;
loc = loc+length;
loc1 = loc;
}
}
呼び出し元関数では、次のように使用しました
char *id
char **splitdetails = split("20000000<delimit>10<delimit>testing" , "<delimit>");
id = splitdetails[0];
//some works done with id
//free the split details with this code.
for(int i=0;i<3;i++) {
free(domaindetails[i]);
}free(domaindetails);
domaindetails=NULL;
次に、2番目に同じものを呼び出しました。
char **splitdetails1= split("10000000<delimit>1000<delimit>testing1" , "<delimit>");
エラーが発生し、関数を解放できません。
前もって感謝します。