NULL文字のはずなのに描画時に・になる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
てんむすキツネ
記事: 88
登録日時: 9年前
住所: 岡山

NULL文字のはずなのに描画時に・になる

#1

投稿記事 by てんむすキツネ » 8年前

文章を読み込んで、一定までのカウントが増えたら
描画する文字数を増やし
実際に描画する、という処理をしています。

文字列の終了すべき点numを\0にして
そこまでを描画させています。

が、この\0の部分が・で描画されます。

コード:

void cls_message::Draw_Message(){
	
	DrawRotaGraph( MESSAGE_X , MESSAGE_Y , 1.0f , 0.0f , load.G_blow , TRUE );			//吹き出し

	char buf[ 256 ];

	for( int i=0; i<MESSAGE_NUM_MAX; i++){

		strcpy_s(buf, 256, text[i]);	//文章を読み込む

		if( i == num_line ){			//今表示中の行なら
			buf[num] = '\0';			//表示可能な文字でストップ
		}
		
		if( i <= num_line ){			//まだ表示中でない行は表示しない
			DrawFormatStringToHandle( MESSAGE_X-230 , MESSAGE_Y-80+i*40 , color[0] , font[0] , buf );
		}
	}
}
void cls_message::Message_count(){

	C_message++;

	if( num_line <= MESSAGE_NUM_MAX ){					//存在する行なら
		if( C_message == MESSAGE_ONE_TIME){	//一文字分時間が過ぎると

			num++;										//文字追加
			C_message	= 0;							//カウンタ初期化

			if(text[num_line][num] == '\0'){			//この文が行の終わりなら
				num_line++;								//行追加
				num = 0;								//文字数初期化
				if(text[num_line][0] == '\0'){			//次の行の文がなければ
					num_line = MESSAGE_NUM_MAX+1;		//無理やり終わらせる
				}
			}

		}
	}
	else{
		if( C_message > 60){
			num_line	= 0;
			num			= 0;
			C_message	= 0;
			main_state	= 50;
		}
	}
}
どのような原因が考えられますか?
MLP!MLP!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: NULL文字のはずなのに描画時に・になる

#2

投稿記事 by softya(ソフト屋) » 8年前

マルチバイト文字コードの途中でナル文字になった時。
例えばshift-jisの2バイトコードで2バイト目。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
てんむすキツネ
記事: 88
登録日時: 9年前
住所: 岡山

Re: NULL文字のはずなのに描画時に・になる

#3

投稿記事 by てんむすキツネ » 8年前

実際に、中身がどうなっているか見てみたら
ソフト屋さんの言っていた意味がよくわかりました。
MLP!MLP!

アバター
てんむすキツネ
記事: 88
登録日時: 9年前
住所: 岡山

Re: NULL文字のはずなのに描画時に・になる

#4

投稿記事 by てんむすキツネ » 8年前

質問したいことができたので
解決を外しました

マルチバイト文字コードの場合、どのようにすれば
文字列をくぎることができるでしょうか?
MLP!MLP!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: NULL文字のはずなのに描画時に・になる

#5

投稿記事 by softya(ソフト屋) » 8年前

ここの掲示板でも何度か質問が出てますが文字コードを判定して2バイト目かどうかを判定する必要があります。
文章の場合には句読点などの禁則処理も必要でしょうね。

ISLeさんがサンプルを公開しているので探してみてください。
「DXライブラリでの自動改行 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?t=11013&p=88626
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
てんむすキツネ
記事: 88
登録日時: 9年前
住所: 岡山

Re: NULL文字のはずなのに描画時に・になる

#6

投稿記事 by てんむすキツネ » 8年前

ありがとうございます。
まだ、マルチバイト文字について、あまり理解できていません。

禁則処理というのは、つまり自動で改行した際に
句読点等が文の先頭にこないようにするという処理でしょうか?
MLP!MLP!

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: NULL文字のはずなのに描画時に・になる

#7

投稿記事 by softya(ソフト屋) » 8年前

天紆 狐 さんが書きました:ありがとうございます。
まだ、マルチバイト文字について、あまり理解できていません。

禁則処理というのは、つまり自動で改行した際に
句読点等が文の先頭にこないようにするという処理でしょうか?
マルチバイト文字だと俗に言う半角文字は1バイトですが全角文字は2バイトになります。
この場合2バイト目に強引にナル文字などを入れると文字コードとして成立しなくるので・などが表示されるわけです。

禁則処理は、そういう事です。元々は印刷・出版業界用語です。
http://ja.wikipedia.org/wiki/%E7%A6%81% ... 6%E7%90%86
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
てんむすキツネ
記事: 88
登録日時: 9年前
住所: 岡山

Re: NULL文字のはずなのに描画時に・になる

#8

投稿記事 by てんむすキツネ » 8年前

できました!大変有難う御座います!
MLP!MLP!

閉鎖

“C言語何でも質問掲示板” へ戻る