wput_file_wtext_cstdio

fputwsを使ったwput_file_wtext_cstdioを作る。
その前に、fputsを使ったput_file_text_cstdioがロケールの影響を受けるか確認する。
main.cを、

/* ヘッダファイルのインクルード */
#include <stdio.h> /* 標準入出力 */
#include <locale.h> /* ロケール */

/* 関数のプロトタイプ宣言 */
int put_file_text_cstdio(const char *path, const char *text); /* 関数put_file_text_cstdioの宣言. */

/* main関数の定義 */
int main(void){

  /* 配列の初期化. */
  char japanese_str[] = "あいうえお\nかきくけこ\nさしすせそ"; /* '\n'が含まれた日本語文字列. */

  /* japanese_strを"test1.txt"に出力. */
  put_file_text_cstdio("test1.txt", japanese_str); /* put_file_text_cstdioでjapanese_strを"test1.txt"に出力. */

  /* ロケール"ja_JP.UTF-8"のセット. */
  setlocale(LC_ALL, "ja_JP.UTF-8"); /* setlocaleでLC_ALL, "ja_JP.UTF-8"をセット. */

  /* japanese_strを"test2.txt"に出力. */
  put_file_text_cstdio("test2.txt", japanese_str); /* put_file_text_cstdioでjapanese_strを"test2.txt"に出力. */

  /* ロケール"ja_JP.EUC-JP"のセット. */
  setlocale(LC_ALL, "ja_JP.EUC-JP"); /* setlocaleでLC_ALL, "ja_JP.EUC-JP"をセット. */

  /* japanese_strを"test3.txt"に出力. */
  put_file_text_cstdio("test3.txt", japanese_str); /* put_file_text_cstdioでjapanese_strを"test3.txt"に出力. */

  /* プログラムの終了 */
  return 0; /* 0を返して正常終了. */

}

/* C標準入出力ライブラリ関数で文字テキストファイル出力. */
int put_file_text_cstdio(const char *path, const char *text){

  /* 変数・構造体の初期化. */
  FILE *fp = NULL; /* ファイルポインタfpをNULLで初期化. */
  int ret; /* fputsの戻り値ret. */

  /* ファイルを開く. */
  fp = fopen(path, "w"); /* fopenでテキスト書き込みで開く. */
  if (fp != NULL){ /* fpがNULLでない時. */

    /* ファイルにテキストを書き込む. */
    ret = fputs(text, fp); /* fputsでfpにtextを出力し, 戻り値はretに格納. */

    /* fpを閉じる. */
    fclose(fp); /* fcloseでfpを閉じる. */

    /* fputsが成功ならretは0. */
    return ret; /* returnでretを返す. */

  }

  /* ファイルを開けない場合は, -1を返す. */
  return -1; /* returnで-1を返す. */

}

とする。

すべてUTF-8になるので影響を受けない。
すべてUTF-8になるので影響を受けない。

すべてUTF-8になるので影響を受けない。
wput_file_wtext_cstdioを実装する。

と書く。

test1.txtは文字化け。
test1.txtは文字化け。

test1.txtは文字化け。

test3.txtはEUC-JP。
test3.txtはEUC-JP。

test3.txtはEUC-JP。
test2.txtはUTF-8になるので影響を受ける。

Test/c/wput_file_wtext_cstdio/wput_file_wtext_cstdio/src/wput_file_wtext_cstdio at master · bg1bgst333/Test · GitHub