#include <stdio.h>

#define  data "<STUDENT>BILL<AGE>14</AGE><SCHOOL>Junior<PLACE>Minato</PLACE></SCHOOL></STUDENT>"

#define  MAXELMNUM  256

typedef  struct  {
    char *tag;
    int  depth;
    char *value;
} ELEMENT;

char  *parse_ml_data( char *, int );
ELEMENT  elmtbl[ MAXELMNUM ];
int  elmnum = 0;

void parse_ml_string( char *mlstr )
{
    while( *mlstr != '\0' ){
	mlstr = parse_ml_data( mlstr + 1, 1 );
    }
}

char  *parse_ml_data( char *mlstr, int level )
{
    /* 開始タグ処理 */
    elmtbl[ elmnum ].tag = mlstr;
    elmtbl[ elmnum ].depth = level;
    for( ; *mlstr != '>'; mlstr++ );
    *mlstr = '\0'; /* ← ハンドルされていない例外は
		      test.exeにあります:0xC0000005:
		      Access Violation */
    /* タグの値処理 */
    elmtbl[ elmnum ].value = mlstr + 1;
    for( mlstr++; *mlstr != '<'; mlstr++ );
    *mlstr = '\0';
    elmnum++;
    /* 下位のタグ構造処理 */
    while( *(mlstr + 1) != '/' )
	mlstr = parse_ml_data( mlstr + 1, level + 1 );
    /* 終了タグ処理 */
    for( mlstr += 2; *mlstr != '>'; mlstr++ );
    return  mlstr + 1;
}

// mainルーチンのみ、質問者により追加。
int main( void )
{
    /*char *mlstr = data;*/
    char mlstr[] = data;

    printf( "%s", mlstr );

    parse_ml_string( mlstr );

    return 1;
}