- ベストアンサー
猫のUnicode出力方法とは?
- gcc version 4.7.1 (tdm-1)を使用して、Windows7 64bitの環境で猫のUnicode出力方法を調べています。
- コマンドプロンプトのchcp65001を設定しても、文字化けが発生し、正しい出力結果が得られません。
- ファイルには猫(944C)という文字が出力されますが、Unicodeのコードポイントである732Bとして出力したいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
関連するQ&A
- UNICODE時のファイル入出力について
【使用環境】 WinXP, VS2005, C++, "Unicode 文字セットを使用する"設定 現在以下のようなコードを試しているのですが、何故か上手くいきません。 マルチバイトの際にWCHARをcharに置き換えたりした場合はちゃんと 動作したのに何故でしょう・・・。 ヘルプから探してみると、ロケールの設定らしきことが書いてありますが、 サンプルが見つからず苦戦しております。 以下のコードをどのように修正すれば正しく読み込めるようになるのでしょうか・・。 --- コード ------------------------------------------------- #include <iostream> #include <cstdio> #include <cstdlib> #include <windows.h> using namespace std; // 1行読み込んで返す関数 WCHAR * LoadFile( WCHAR * FilePath ){ static WCHAR Buf[ 256 ] ={0}; FILE * fp = _wfopen( FilePath, L"r" ); fgetws( Buf, 256, fp ); fclose( fp ); return Buf; } int main(){ WCHAR * text = LoadFile( L"test.txt" ); cout << text; } --- 読み込むファイルの中身の文字列:test.txt --------------- aあ --- 実行結果 ----------------------------------------------- 00417178続行するには何かキーを押してください . . .
- ベストアンサー
- C・C++・C#
- ワイド文字(列)について
ワイド文字(列)について質問です。 printf()などより、wprintf()などのワイド文字を扱える関数を 使おうと思っているのですが、うまく表示されません。 何が原因なのでしょうか? ソースです。 #include <stdio.h> int main(void) { wchar_t *data = L"かきくけこ"; wprintf(L"あいうえお\n"); wprintf(L"%s\n", data); return (0); } wprintf(L"%s\n", data);は表示はされるのですが、 「?」になります。 環境 XP Visual Studio 2005
- ベストアンサー
- C・C++・C#
- 文字列を特定の全角文字で区切る方法
文字列を特定の全角文字で区切る方法 C言語で、文字列を特定の全角文字で区切って画面に出力する操作をしたいのですが、うまくいきません。 #include <wchar.h> int main(void) { wchar_t name[] = L"シーゲンゴ・タロウ"; wchar_t *p; wchar_t delim[] = L"・"; wprintf(L"%ws\n", name); p = wcstok(name, delim); putws(p); while (p!=NULL) { p = wcstok(NULL, delim); if (p!=NULL) { putws(p); } } } 上記のコードを実行すると、出力が シーゲンゴ・タロウ シ [ゲンゴ タロ・ となってしまい、何故か"ー"と"ウ"まで反応して別の文字になります。 今までwchar.hを使ったことが無かったので、やり方が不味い所を教えて下さい。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- [C++]ファイル出力について
教えてください。 コマンドプロンプトから何行か書いた文章をファイルにしたいのですが、 うまくいきません。 作ったものの結果は1行1文字で出力されて、eofでうまく 終わってくれません。 コマンドプロンプトで入力(改行)された通りにファイルに出力 できるようにしたいので、どこがおかしいのか指摘お願いします。 #include <iostream> #include <fstream> #include <stdlib.h> #include <string.h> #include <string> using namespace std; int main(int argc, char *argv[]) { char str[100]; int i; i = 0; if (argc <= 1) { cerr << "Need filename" << endl; exit (1); } ifstream ifs(argv[1], ios::in); if (ifs) { cerr << "Caution" << argv[1] << " already exists " << endl; cerr << " Specify a different filename " << endl; exit (2); } ofstream ofs(argv[1], ios::out); if (!ofs) { cerr << " Unable to write to " << argv[1] << endl; exit (3); } while(str[i] !=EOF) { cin >> str[i]; ofs << str[i] << endl; i++; } return 0; }
- 締切済み
- C・C++・C#
- c言語のファイル出力について
現在C言語の課題に取り組んでおり、ファイルの中身通りに出力させたいのですが 「ファイルの中身」 2022/11/14 16:19:56 4+4,8.000000 2022/11/14 16:20:14 7+7,14.000000 2022/11/14 16:20:18 8+8,16.000000 2022/11/14 16:19:56 4+4,8.000000 2022/11/14 16:20:14 7+7,14.000000 2022/11/14 16:20:18 8+8,16.000000 2022/11/14 16:19:56 4+4,8.000000 2022/11/14 16:20:14 7+7,14.000000 2022/11/14 16:20:18 8+8,16.000000 「出力結果」 2022/11/14 16:19:56 4+4,8.000000 2022/11/14 16:20:14 7+7,14.000000 2022/11/14 16:20:18 8+8,16.000000 こういう形で改行されて出てきてしまいます。 どなたか修正点を教えて頂けないでしょうか? #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int r,i,n; FILE* fp; char sin[9][1000]; fp = fopen("log.txt", "r"); if (fp == NULL) { printf("ファイルオープン失敗\n"); return -1; } for (i = 0; i < 9; i++) { fscanf(fp, "%s", &(sin[i])); } fclose(fp); for (i = 0; i < 9; i++) { printf("%s\n", sin[i]); } return 0; }
- ベストアンサー
- C・C++・C#
- ファイルの出力
コマンドラインで指定したファイルの内容を一行ずつ表示するプログラムです。一行表示するごとに次の行も表示するか尋ねます。 #include<stdio.h> #include<stdlib.h> #include<ctype.h> int main(int argc, char *argv[]) { FILE *fp; char str[80]; char ch; if (argc != 2){ printf("コマンドライン引数が違います\n"); exit(1); } if ((fp = fopen(argv[1],"r")) == NULL){ printf("ファイルが開けません"); exit(1); } while(!feof(fp)){ fgets(str, 79, fp); if (!feof(fp)) printf("%s",str); printf("追加しますか?(y/n)"); gets(str); if ( toupper(*str) == 'N') break; printf("\n"); } if (fclose(fp) == EOF){ printf("ファイルを閉じれません\n"); exit(1); } return 0; } while文の gets(str); if ( toupper(*str) == 'N') break; この部分を ch = getchar(); if ( toupper(ch) == 'N') break; でやると上手く実行できないのですが、なぜでずか?
- ベストアンサー
- C・C++・C#
- おしえて
#include <stdio.h> #include <stdlib.h> int a[30000][6]; int main(int argc, char *argv[]) { FILE *fp; int c,n,i,j; if ((fp = fopen(argv[1], "r")) == NULL) { printf("File Open Error.\n"); exit(1); } for(i=0;i<30000;i++){ for(j=0;j<6;j++){ c = fscanf(fp, "%d", &n); if (c) { a[i][j]=c; printf("%d ",a[i][j]); } } printf("\n"); } fclose(fp); return 0; } このプログラムを書きましたna.txtのファイルが以下のようなとき 1 2 3 4 5 6 3 4 5 6 7 8 のとき先頭の1しか配列に格納できません。どうしても順番にa[0][0~5]=1~6と入れたいです。どうしてもわかりません。おしえてください!!
- 締切済み
- C・C++・C#
- 画像を読み込んでヒストグラムを作るプログラム
2値化画像を読み込んで、ヒストグラムを表示させるプログラムを作りたいのですが、 以下のソースを作成したのですが実行中にエラーが発生して困っています。 よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #define width 640 #define height 480 int main(int argc, char* argv[]) { unsigned char image[640*480]; unsigned char header32[1078];//ビットマップ情報 int i; int *histogram; FILE *fp1; unsigned char buffer1[640*480]; for(i=0; i<640*480; i++) { image[i]=0; buffer1[i]=0; } fp1=fopen("koshimizu1.bmp","rb"); // fread(image,1,640*480,fp1); fread(header32,1,1078,fp1); fread(buffer1,width,height,fp1); fclose(fp1); for(i=0;i<256;i++){ histogram[i]=0; } for(i=0;i<640*480;i++){ histogram[image[i]]++; } for(i=0;i<256;i++){ printf("%d %d \n",i,histogram[i]); } return 0; }
- 締切済み
- C・C++・C#
- 【C++】関数ポインタの使い方
関数ポインタの使い方で悩んでいます。 下記の (1)のようにグローバルメソッドとして定義したメソッドを関数ポインタに代入することは出来るのですが、 (2)のようにクラスのメンバメソッドとして定義したメソッドは関数ポインタに代入することは出来ませんでした。 Error:バインドされた関数へのポインターは関数の呼び出しにのみ使用できます。 というエラーが発生します。 関数ポインタに外部参照でメソッドを代入することは出来ないのでしょうか? -----(1)------------------------------------------------------------------ #include "stdafx.h" #include <iostream> using namespace std; int f(int a, int b){ return a * b; } int _tmain(int argc, _TCHAR* argv[]) { typedef int (* FUNC_POINTER)(int, int); FUNC_POINTER fp; fp = f; cout << fp(1,2) <<endl; getchar(); return 0; } ------------------------------------------------------------------------- -----(2)------------------------------------------------------------------ #include "stdafx.h" #include <iostream> using namespace std; class MPointerList{ public: int f(int a, int b){ return a * b; } }; int _tmain(int argc, _TCHAR* argv[]) { typedef int (* FUNC_POINTER)(int, int); FUNC_POINTER fp; //fp = f; MPointerList mP; fp = mP.f; cout << fp(1,2) <<endl; getchar(); return 0; } -------------------------------------------------------------------------
- ベストアンサー
- C・C++・C#
- 【C言語】ファイルを読み込んで16進数で表示する
ファイルをバイナリモードで読み込んで16進数で表示するプログラムについて質問です。 以下の処理内容が理解できません。どのような処理を行っているのでしょうか?? (xdump.c)********************************* #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { int i, j; FILE *fp; if(NULL == (fp = fopen(argv[1], "rb"))) { fprintf(stderr, "Cannot open FILE[%s].\n", argv[1]); exit(1); } for(i=0; i<0x7FFF; ++i) { printf("%08X :", ftell(fp)); for(j=0; j<16; ++j) { int c; c = 0x00FF & getc(fp); if(ferror(fp)) { puts("\a>>>> Read Error ! <<<<"); break; } if(feof(fp)) break; /* 16進数で表示 */ printf(" %2X", c); } printf(" : %08X\n", ftell(fp)-1); /* : */ /* : */ /* 以下省略 */ ****************************************** 上記に関して、 最初のfor文から"c = 0x00FF & getc(fp);"までの処理内容が よくわかりません。どなたかご教授願えますでしょうか?
- ベストアンサー
- C・C++・C#
- 無線LAN接続で発生しているエラーについて質問があります。
- ノートパソコンでエレコム株式会社の製品を使用しています。
- 接続時に暗号化キーを入力すると、インターネット接続なしと表示され接続できません。
お礼
コンソールへのUTF-8の書き出しがまだできませんが、 上記で言われているfrwiteで検索したところ、よいサンプルが あったので見ようみまねでテストしてみました。 下記内容でutf-16で出力できました。 また、仕様を教えてくださりありがとうございます。 sjisでテキストファイルに出力する場合以外は、fwrite/freadで 読み書きするようにします。 #define UNICODE #define _UNICODE #include <stdio.h> #include <iostream> #include <tchar.h> int main () { const TCHAR *str = _T("猫"); const TCHAR *name = _T("a.txt"); FILE *fp; fp = _tfopen(name, _T("w+,ccs=UTF-16LE")); if (fp) { fwrite(str, sizeof(TCHAR), _tcslen(str), fp); fclose(fp); } } ありがとうございました。