C99に対応した標準Cライブラリの実装レポートを行っていきます。

プロフィール 

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

ホーム 全記事一覧 << 前の記事 次の記事 >>

 

2008/10/07 11:44|

 

wctomb関数は、mbtowc関数の逆で、ワイド文字から多バイト文字へかんかんするための関数です。例によって、現時点では"C"ロケールにしか対応しませんので、実装はいたって簡単です。

#include <stddef.h>

int wctomb(char *s, wchar_t wc)
{
  if (s == NULL)
    return 0;
  *s = (char)wc;
  return 1;
}

sが空ポインタの場合、多バイト文字がシフトシーケンスに依存する場合は非0を、それ以外は0を返す必要があるので、今回は0を返しています。また、wcがナルワイド文字の場合は、シフトシーケンスを初期状態に戻したりといった仕様がありますが、ここでは関係ないので反映されていません。

ところで、sが指す配列はMB_CUR_MAXバイト以上であることが要求されています。C99より前のバージョンの場合、可変長配列が使えませんので、汎整数式とは限らないMB_CUR_MAXを配列の要素数とすることはできず、代わりにMB_LEN_MAXを使わざるを得ませんでしたが、C99ではMB_CUR_MAXを使うことができます。ただし、実際のところ、どちらが効率がよいかは微妙なところです。

2006/06/15 10:56|一般ユーティリティTB:0CM:0

コメント
コメントの投稿

管理者にだけ表示を許可する


トラックバック
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/71-1fb6de22

ホーム 全記事一覧 << 前の記事 次の記事 >>

ブログ内検索 

お勧め書籍 

RSSフィード 

リンク 

このブログをリンクに追加する

Powered By FC2ブログ 

Powered By FC2ブログ
ブログやるならFC2ブログ

Copyright(C) 2006 TAKAGI Nobuhisa All rights reserved.
Powered by FC2ブログ. 無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て template designed by 遥かなるわらしべ長者への挑戦.