다음은 매개 변수로 제공되는 문자열의 맨 앞과 맨 마지막 문자 사이의 부분 문자열을 반환하는 함수입니다. 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