#include <stdio.h>
#include <string.h>
#include <iconv.h>
int main(int argc, char *argv[])
{
iconv_t conv;
char src[10000];
char dst[10000];
int src_len = strlen(src);
int dst_len = sizeof(dst) - 1;
char *buf_in;
char *buf_out;
FILE *fp;
fp = fopen(argv[1], "r");
if(NULL == fp)
{
printf("ファイルを開けません\n");
}
else
{
while(fgets(src, 10000, fp) != NULL)
{
buf_in = src;
buf_out = dst;
/* 変換器を作成 */
conv = iconv_open("Shift-JIS", argv[2]);
/* 変換 */
iconv(conv, &buf_in, &src_len, &buf_out, &dst_len);
*buf_out = '\0'; /* 終末処理 */
/* 文字コード後の文字列を表示 */
printf("%s\n", dst);
}
/* 変換器を終了 */
iconv_close(conv);
/*ファイルを閉じる*/
fclose(fp);
}
return 0;
}
msys環境での実行
msys環境での実行
msys環境で実行して,指定されたファイルの文字コードをShift-JISに変換して表示するコードを作成しているのですがうまく表示されません.何がいけないのでしょうか.文字コードの変換にはiconvを使用.第1引数に変換対象のファイル名,第2引数にファイルの文字コードを指定しています(argv[1]にファイル名,argv[2]に文字コードが格納されているということです).
Re: msys環境での実行
- src_lenおよびdst_lenの型がsize_tではない
- src_lenの値が不定もしくは意味の無いデータから計算され、そのままiconv関数に渡されている
Man page of ICONV
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: msys環境での実行
src_lenの値を与える場所変えたらできました!型はintでもできたのですがsize_tのがよいのでしょうか?
Re: msys環境での実行
size_tの方がよさそうだと思います。警告が出ませんでしたか?カヌー さんが書きました:src_lenの値を与える場所変えたらできました!型はintでもできたのですがsize_tのがよいのでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)