C言語でコメント部分を無視する方法

ということで、サンプルコードです。あまりエレガントではないのですが,よろしければ使ってください.
コメントのセパレータは # 以降か /* */ で囲まれた文字です.
それなりに動作はしているようです.
最終的にwbufにコメントではない文字が格納されます.
テストで使ったテキストファイルは次のとおりです.

123#ここは表示されないこと
abcdefg		#ここは表示されないこと
#残り全部コメントアウト
hogehoge	/*ここは表示されないこと	*/
/*複数の
行に
またがり
コメント
アウト
*/
0.123	/*ここも表示されない
みえない
わからない	*/foo/**/
hugahuga
#みえない/*当然見えない*/
/*みえない#当然見えない*/
#みえない/*見えない
見えるかも 見えなかった なんでだ?
*/
/*みえない#
見えるかも
*/

end

C言語ソースコードは以下のとおり.

//#以降の文字をコメントとして表示しない
//また/*・・・*/で囲まれた間もコメントとして表示しないテスト.

#include "stdafx.h"
#include 
#include 
#define BUF_SIZE 256	//maximam charactor on 1 line.

int main(int argc, char* argv[])
{
	FILE*	fp;
	char	rbuf[BUF_SIZE],buf[BUF_SIZE],wbuf[BUF_SIZE],*src,*dst;
	int		flag,i;

	//file open.
	fp = fopen("a.txt","r");
	if(fp == NULL){
		printf("fopen error\n");
		return 1;
	}
	
	//file read to end.
	flag = 0;
	while(1){
		//1 line read from file.
		memset(wbuf,'\0',sizeof(wbuf));
		memset(rbuf,'\0',sizeof(rbuf));
		memset(buf,'\0',sizeof(buf));
		if(fgets(rbuf,BUF_SIZE-1,fp) == NULL)
			break;
		rbuf[strlen(rbuf)-1] = '\0';	//改行コードの削除

		//check comment charactor.
#if 0
		//行内に#が出てくるまでの文字列をコピー
		//単体のチェック
		src = rbuf;dst = buf;
		for(i=0;i < (int)strlen(rbuf) + 1;i++){
			if(strncmp(src,"#",strlen("#")) != 0){
				*dst = *src;
				src++;dst++;
			}
		}
		printf("[%s]\n",buf);
#endif
#if 0
		//"/*"から"*/"までをコメントとして認識する
		//単体のチェック
		src = rbuf;dst = buf;
		for(i = 0; i < (int) strlen(rbuf) + 1;i++){
			if(flag == 0){	//"/*"を検索する コメントの開始
				if(strncmp(src,"/*",strlen("/*")) != 0){
					*dst = *src;
					src++;dst++;
				}else{
					flag = 1;
				}
			}
			if(flag == 1){	//"*/"を検索する コメントの終了
				if(strncmp(src,"*/",strlen("*/")) != 0){
					src++;
				}else{
					flag = 0;
					src++;src++;
				}
			}
		}
		printf("[%s]\n",buf);
#endif

		//二つのコメントパターンを同時にチェック
		//行内に#が出てくるまでの文字列をコピー
		src = rbuf;dst = buf;
		for(i=0;i < (int)strlen(rbuf) + 1;i++){
			if(strncmp(src,"#",strlen("#")) != 0){
				*dst = *src;
				src++;dst++;
			}
		}
		//#より前の文字列中のコメントを認識する。"/*"から"*/"までをコメントとして認識する
		src = buf;dst = wbuf;
		for(i = 0; i < (int) strlen(buf) + 1;i++){
			if(flag == 0){	//"/*"を検索する コメントの開始
				if(strncmp(src,"/*",strlen("/*")) != 0){
					*dst = *src;
					src++;dst++;
				}else{
					flag = 1;
				}
			}
			if(flag == 1){	//"*/"を検索する コメントの終了
				if(strncmp(src,"*/",strlen("*/")) != 0){
					src++;
				}else{
					flag = 0;
					src++;src++;
				}
			}
		}
		if(strlen(wbuf) != 0)
			printf("[%s]\n",wbuf);
	}
	fclose(fp);
	return 0;
}

一部に作者が想定していなかった動作をしているのですが,デバッガを上手く使いこなせれていないので,後回しにしています.また修正できたら、載せたいと思います.


追記:わかりました。
読み込んでいるテキストで#でコメントアウトしている以降の文字で*/ とコメント終了しているのですが,その部分が処理されていないので,そのままコメントが継続しているということでした。
読み込むファイルを以下のようにした場合

/*123#456*/
#789/*012
345
*/

で最初の行で123はコメントになるのですが,次の#で456の後ろの*/がコメント終了と認識されず、2行目はまるっとコメントになるので,345はコメントの続きと判断されたのでした.
使用する場合は#の後ろに/* */を入れても正しく処理されないのでご注意ください.(笑)