演習を解いている間、メモリの割り当てに行き詰まりました。
演習要件: 区切り記号に応じて文字列を分割する関数を作成します。2 番目の引数は、一意の文字区切りです。この関数は、区切り記号で囲まれた文字列を含む配列を返す必要があります。
例:
Input: "abc def gh-!" && "-"
Output: ["abc def gh", "!"]
コード:
#include<stdlib.h>
typedef struct s_string_array {
int size;
char** array;
} string_array;
string_array* my_split(char* a, char* b) {
//Memory allocation part:
string_array*ptr=(string_array*)malloc(sizeof(string_array));
int count=0;
for(int i=0;a[i]!='\0';i++)
{
if(a[i]==b[0])
{
count++;
}
}
ptr->size=count+1;
ptr->array=malloc(sizeof(char*)*ptr->size);
int size2=0;
int q=0;
for(int i=0;i<ptr->size;i++)
{
for(;a[q]!=b[0];q++)
{
size2++;
}
ptr->array[i]=malloc(sizeof(char)*(size2+2));
ptr->array[i][size2+1]='\0';
q+=2;
}
//Filling the array:
int c=0;
for(int i=0;a[i]!='\0';i++)
{
if(a[i]!=b[0]){
for(int j=i,r=0;a[j]!=b[0];j++,r++)
{
ptr->array[c][r]=a[j];
}
c++;
}
}
return ptr;
}
エラーが発生しています。誰かが私が間違っていることを説明できますか?