パラメータとして提供される、文字列の最初と最後の文字の間で部分文字列を返す関数です。 exclusive
フラグは、それらの文字を結果に含めるかどうかを指示します。
私はstrncpy()
を試す前にいくつかの追加検証が行われていると推測していますので、注意してください。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *substr_betweenchars(char *string, char begin, char end, int exclusive)
{
char *left = strchr(string, begin);
char *right = strrchr(string, end);
char *result = 0;
int a = left - string;
int b = right - string;
int n = b - a + 1 - (!!exclusive << 1);
if (left && right)
{
result = malloc(n * sizeof(char));
strncpy(result, left + !!exclusive, n);
}
return result;
}
int main(void)
{
char string[] = "[2009:7a4d:80d2:33af:0000:0000]:6667";
printf("%s\n", substr_betweenchars(string, '[', ']', 1));
printf("%s\n", substr_betweenchars(string, '[', ']', 0));
printf("%s\n", substr_betweenchars(string, '8', '2', 1));
printf("%s\n", substr_betweenchars(string, '8', '2', 0));
return 0;
}
出力:
$ gcc -Wall -o substr substr.c
$ ./substr
2009:7a4d:80d2:33af:0000:0000
[2009:7a4d:80d2:33af:0000:0000]
0d
80d2
基本的にあなたが探しているのは、Cの 'substr'実装ですか? – Eregrith
私はあまりにもPHPに精通しているわけではありませんが、私はそれが私が探しているものと確信しています。 – user1226628