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