第5回目の宿題でよく間違っているところ(5/21)
- 宿題:半角数字を全角数字に置き換え,それ以外はそのままコピーする関数 zenkakunum を作成せよ.zenkakunum は,文字へのポインタ型の引数を1つ持つ.まず,この引数の文字列の先頭から末尾までについて,半角数字の数を調べ,全角数字に置き換えた際の文字列の長さを計算する.そして,丁度の容量を確保し,置き換え結果を格納する.返り値は,置き換え後の文字列の先頭のポインタとする.なお,確保に失敗した場合は,NULL を返す.⇒ prac0503.c
- 方針:
- 全角数字に変換後の文字列を格納する領域を,malloc で確保する.
- 半角数字を全角数字にするので,半角数字の文字数だけ,元の文字列の長さより長くなる.
- strlen など,文字列の長さという時は,'\0'が含まれていない.
- malloc で確保する領域のサイズは,'\0'も1文字として計算する.
- eucコード表に基づき半角数字を全角数字に変換する.
- 変換前文字列の i 番目の文字を変換後文字列の j 番目にコピーをする.
- i 番目の文字が '0' ならば,j 番目の文字コードは 0xa3,j+1 番目の文字コードは,0xb0 とする.
- '1' の場合は,0xa3 と 0xb1 とする.つまり,j+1番目の文字コードを '0'から'9'にあわせて,0xb0 から 0xb9 とする.
- 変換後の文字列の最後に'\0'を代入する.
- 間違い例:
- malloc で確保するサイズの計算に '\0' のぶんが含まれていない.
- 変換後文字列の最後に '\0' を代入していない.
(c) Masato TOKUHISA, 2003, May. 21