C言語

ccs=UTF-32LE

UTF-32LEもできるが、ちょっといろいろめんどくさい。C言語のワイド文字入出力 | 雑記帳fopen.cで、こう書く。 バイナリモードで開くのと、BOMも長くなるし、fwriteで書き込むのがポイント。 開くと開くと、 認識できない認識できない。 サクラエディタなら…

ccs=ISO-2022-JP

ccs=ISO-2022-JPとすると、JISで入出力される。C言語のワイド文字入出力 | 雑記帳fopen.cで、こう書く。 test.txtを開くとtest.txtを開くと、 iso-2022-jpiso-2022-jpで、 TeraPadでJISとわかったTeraPadでJISとわかった。Sample/c/fopen/ccs_ISO-2022-JP/sr…

ccs=Shift_JIS

ccsにShift_JISも指定できる。C言語のワイド文字入出力 | 雑記帳fopen.cで、こう書く。 test.txtを開くとtest.txtを開くと、 sjisだとわかるしsjisだとわかるし、 TeraPadもSJISだと言っている。TeraPadもSJISだと言っている。Sample/c/fopen/ccs_Shift_JIS/…

ccs=UTF-16BE

ccsにUTF-16BEも指定できる。C言語のワイド文字入出力 | 雑記帳fopen.cで、こう書く。 test.txtを開くとtest.txtを開くと、 文字化けしているが文字化けしているが、 最近のメモ帳はUTF-16BEにも対応してるので、確認できる。最近のメモ帳は、UTF-16BEにも対…

ccs=UTF-16LE

これまでワイド文字出力と言いながら、ワイド文字テキストファイルとして出力できていなかったが、ccsにUTF-16LEも指定できるので、これでWindowsのUnicodeテキストファイルとして出力する。C言語のワイド文字入出力 | 雑記帳fopen.cで、こう書く。 始めにUT…

ccs=EUC-JP

ccs=EUC-JPにすると、EUC-JPで書き出される。C言語のワイド文字入出力 | 雑記帳fopen.cで、こう書く。 test1.txtを開くと、 UTF-8になっているとする。UTF-8になっているとする。 実行すると、test2.txtが生成されて、実行すると、test2.txtが生成されて、 …

ccs=UTF-8

ccsをUTF-8にすれば、UTF-8で書き出される。C言語のワイド文字入出力 | 雑記帳fopen.cで、こう書く。 test.txtを開くとtest.txtを開くと、 UTF-8UTF-8。Sample/c/fopen/ccs_UTF-8/src/fopen at master · bg1bgst333/Sample · GitHub

ccs

fopenでccsに文字コードを指定することで、その文字コードで読み書きできる。 これだとsetlocaleが不要になる。C言語のワイド文字入出力 | 雑記帳fopen.cで、こう書く。 fwprintfのワイド文字出力でEUC-JPで書き出す。 カンマ(',')とスペース(' ')とかの間は…

fgetws

fgetwsで、ファイルからのワイド文字入力。Man page of FGETWSfgetws.cで、こう書く。 こうなる。こうなる。Sample/c/fgetws/fgetws/src/fgetws at master · bg1bgst333/Sample · GitHub

fputws

fputwsで、指定文字列のワイド文字ファイル出力。Man page of FPUTWSfputws.cで、こう書く。 実行して、test.txtを見ると、実行して、test.txtを見ると、 EUC-JPで出てるEUC-JPで出てる。Sample/c/fputws/fputws/src/fputws at master · bg1bgst333/Sample ·…

fwscanf

fwscanfで、指定のストリームからワイド文字入力できる。fwscanf(3): convert formatted wide-char input - Linux man page test.txtに"EUC-JP"でこれを書いておく。test.txtに"EUC-JP"でこれを書いておく。fwscanf.cで、こう書く。 読み込めた読み込めた。S…

ja_JP.UTF-8

ロケールが"ja_JP.UTF-8"なら、文字コードがUTF-8のファイルとして書き込まれる。C言語のワイド文字入出力 | 雑記帳setlocale.cで、こう書くと、 test1.txtを開いたらtest1.txtを開いたら、 EUC-JPEUC-JP。 test2.txtを開いたらtest2.txtを開いたら、 UTF-8U…

ja_JP.EUC-JP

setlocaleでロケールを"ja_JP.EUC-JP"にセットしてワイド文字をファイル出力すると、文字コードがEUC-JPのファイルとして書き込まれる。C言語のワイド文字入出力 | 雑記帳setlocale.cで、こう書くと、 こう実行できてこう実行できて、 test.txtは"EUC-JP"に…

fwprintf

fwprintfで、指定のストリームにワイド文字出力できる。Man page of WPRINTF fwprintf | Programming Place Plus C言語編 標準ライブラリのリファレンスfwprintf.cで、こう書くと、 test.txtが出力されてるtest.txtが出力されてる。 UTF-8で"あいうえお"UTF…

wscanf

wscanfはscanfのワイド文字対応関数。wscanf(3): convert formatted wide-char input - Linux man page読み込んだ文字列を、ワイド文字列としてワイド文字配列に格納。 wscanf.cで、こう書くと、 読み込める。読み込める。Sample/c/wscanf/wscanf/src/wscanf…

wprintf

wchar_t配列を引数に取るワイド文字対応関数wprintfもある。Man page of WPRINTF 【C言語】ワイド文字の使い方【日本語】wprintf.cで、char型文字もchar型文字配列も出力できる。 (char型文字は"%c"なのに、char型文字配列は"%hs"なのは注意!) 出力できた出…

wchar_t

ワイド文字を変数に格納するには、wchar_t型変数を定義する必要がある。【C言語】ワイド文字の使い方【日本語】wchar_t.cで、wchar_t型を使うには、wchar.hのインクルードが必要。 格納できた格納できた。Sample/c/wchar_t/wchar_t/src/wchar_t at master · …

ワイド文字

ワイド文字を出力してみる。 実は、printfでもワイド文字を出力できる。【C言語】ワイド文字の使い方【日本語】wide_character.cで、文字リテラルや文字列リテラルの前に'L'を付ける。 printfでは、文字なら書式指定子%lc、文字列なら書式指定子%lsを指定す…

書式指定子

printfの時も、書式指定子は触れたが第2弾。 今回は、そこまで頻繁でもないけどまあまあ使う、%hi、%hu、%u、%lu、%o、%eについて。DOSプロンプトformat_specifier.cで、8進数の%oとか、累乗の%eとか、割と使う。 こうなるこうなる。Sample/c/format_specifi…

sprintf

sprintfで指定の書式の文字列に変換する。Man page of PRINTFこれまで散々出てきたのに、sprintfをトピックとしてはまだ扱ってなかったのが不思議・・・。 sprintf.cで、さまざまな値を連結して1つの文字列に。 こうなるこうなる。Sample/c/sprintf/sprintf/…

strspn

strspnは、指定の文字列の中で、指定の文字群のどれかの文字が先頭からどれくらい続くか長さを返す。strspnちょっとややこしいけど、 例えば、"abcde"という文字群があるとする。 "baeyyyxxx"は、先頭から"bae"という感じで3文字続いてるから、3が返るという…

strxfrm

strcollを扱った時に、チェコ語などの場合は、strcmpとstrcollで順番が変わってしまうことがわかった。 strcmpでもstrcollと同じ順番の結果にするには、対象文字列をstrxfrmで変換しないといけない。Man page of STRXFRM strxfrm - cppreference.comstrxfrm.…

setmode

setmodeは、標準入出力をバイナリモードに切り替えたり、テキストモードに戻したりする時に使う。 バイナリモード/テキストモードの切り替えに関する問題は、Windowsでしか起きないので、Windowsのみ用意されている。 (BSDにも同名関数があるが、機能が違う…

getenv

getenvは、指定の環境変数の値を取得する関数。Man page of GETENVgetenv.cで、とすると、 $ vi getenv.c $ ls getenv.c $ gcc getenv.c -o getenv $ ls getenv getenv.c $ ./getenv path = /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/bg1/.l…

strcoll

strcollは、ロケールのLC_COLLATEに従って文字列の順序を判定(そのロケールの辞書順)する。Man page of STRCOLL strcoll - cppreference.comロケールによっては、アルファベット順ではない場合があるらしい。 strcoll.cで、チェコ語では、"ch"よりも"h"が前…

strtol

strtolは、文字列を指定された基数で変換(n進数の文字列だと解釈)する。Man page of STRTOL strtol, strtoll - cppreference.comstrtol.cで、与えられた文字列を0, 2, 8, 10, 16を基数として変換。 $ vi strtol.c $ gcc strtol.c -o strtol $ ./strtol str: …

atof

atofは、実数の文字列を倍精度浮動小数点数値型に変換する。Man page of ATOFatof.cで、入力文字列がどうなるか試してみる。 $ vi atof.c $ gcc atof.c -o atof $ ./atof str: 1 d = 1.000000 $ ./atof str: 1.23 d = 1.230000 $ ./atof str: -4.56 d = -4.5…

ispunct

ispunctは、句読点文字かどうかをチェックする。ispunct(3) manページ句読点文字というのは区切り文字の事だが、実態としては英数字を除いた表示可能文字、つまり記号であり、スペースは含まれない。いろいろな文字で試してみる。 $ vi ispunct.c $ gcc ispu…

isprint

isprintは、スペースを含む表示文字かどうかをチェックする。isgraph(3): char classification routines - Linux man pageこれで、a、b、c、1、スペース、タブ、改行、Ctrl+A、をチェックする。 $ vi isprint.c $ gcc isprint.c -o isprint $ ./isprint a 61…

isgraph

isgraphは、スペースを除く表示文字かどうかをチェックする。isgraph(3): char classification routines - Linux man page C言語関数辞典 - isgraphこれで、a、b、c、1、スペース、タブ、改行、Ctrl+A、をチェックする。 $ vi isgraph.c $ gcc isgraph.c -o …