そこで、PHP の爆発関数に相当する C 関数を探しています。慣れていない方のために: Explode は文字列を取得し、指定された文字/エスケープ シーケンスで区切られた各エントリを解析します。この関数の最も優れた点は、その戻り値です。これは、すべてのエントリを含む既に偽造された配列です。問題は、これが C に存在しないように見えることです。利用可能な最も近い関数は strchr ですが、分割の最初の発生へのポインターのみを返します。
編集:ここに関数がありますが、動作は異なりますが(戻り値が異なるなど)、それは私が望むものです。
int explode(char* str, char* delim, char ***r) {
char **res = (char**) malloc(sizeof(char*) * strlen(str));
char *p;
int i = 0;
while (p = strtok(str, delim)) {
res[i] = malloc(strlen(p) + 1);
strcpy(res[i], p);
++i;
str = NULL;
}
res = realloc(res, sizeof(char*) * i);
*r = res;
return i;
}
次のように呼び出すことができます。
char str[] = "test1|test2|test3";
char** res;
int count = explode(str, "|", &res);
int i;
for (i = 0; i < count; ++i) {
printf("%s\n", res[i]);
free(res[i]);
}
free(res);