Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

설명

explode, split 등으로 이미 널리 쓰이고 있는 함수 구분자로 문자열을 잘라 2차원 배열에 담는다.
char **explode( char* str, char *need, int *count );
  • char *str: 원본 문자열
  • char *need: 구분자 문자열
  • int *count: 리턴될 배열의 숫자 (호출할 함수에서 정의된 후 참조해서 넘긴다)
  • 리턴된 문자열 배열은 free 해줘야 합니다

사용방법

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char **explode( char* str, char *need, int *count );

int main( int argc, char **argv )
{
	char **str;
	int count;
	char tmp[1024] = "GET / HTTP/1.1\nHost: www.joinc.co.kr\n\n";
	int i;

	str = explode( tmp, "\n", &count );

	for ( i=0; i < count; i++ )
		printf( "%d: %s\n", i, str[i] );


	free( str[0] );
	free( str );
}

코드

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char **explode( char* str, char *need, int *count )
{
	int str_len;
	char **ret;
	char *cpy;
	char *tmp;
	int tmp_len = 0;
	int i;

	if ( str == (char *) 0 )
	{
		(*count) = 0;
		return (char **) 0;
	}

	str_len = strlen( str );
	if ( str_len == 0 )
	{
		(*count) = 0;
		return (char **) 0;
	}

	(*count) = 1;

	cpy = (char *) malloc( sizeof( char ) * str_len );
	cpy = strncpy( cpy, str, str_len );
	tmp = cpy;


	while ( 1 )
	{
		tmp=strstr( tmp, need );
		if ( tmp == (char *) 0)
			break;
		tmp[0] = '\0';
		tmp++;
		(*count)++;
	}

	ret = (char **) malloc( sizeof( char * ) * (*count) );

	for ( i=0; i < (*count); i++ )
	{
		ret[i] = &cpy[ tmp_len ];
		if ( ret[i] == (char *) 0 )
			tmp_len += 1;
		else
			tmp_len += strlen( ret[i] ) + 1;
	}

	return ret;
}