#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;
}