1 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:18:41 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.47【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1200464091/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
662 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 14:58:05 ] >>661 たぶん、そういうのはわかっちゃいるけど、「ついなんとなく」 ぶら下がり文に対してだけ異なる感覚を持ってしまったんだろう。
663 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 15:01:51 ] p r i n t f ( " t e s t \n " ); でもこれは通らないんだね(´・ω・`)
664 名前:641 [2008/02/14(木) 15:02:00 ] サンクス できましたよ #include <iostream> #include <windows.h> #include <process.h> using namespace std; HANDLE handle; unsigned WINAPI fnc(void *x){ int n=(int)x,m; m=3000-n*300; Sleep(m); cout<<n<<"ban "<<m<<"msec Sleep\n\n"; SetEvent(handle);} main(){ handle = CreateEvent(NULL, FALSE, FALSE, NULL); for(int n=0;n<10;n++){ _beginthreadex(NULL, 0, fnc, (void*)n, 0 ,NULL);} while(1){ WaitForSingleObject(handle, INFINITE); cout<<"main reep ga ugoita\n"; }}
665 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 15:05:42 ] >>656 if(○○ == WM_xxx) ○○ ==の部分を毎回書かなければいけない事くらいしか思い当たりません。 その代わりbreak(もしくはreturn)がいらないので記述ミスが減るかなぁと。 と書いているうちに一つ思い浮かんだのが、breakを挟まないことで case WM_CREATE: 〜処理1〜 case WM_PAINT: 〜処理2〜 break WM_CREATEがきたときは処理1,処理2をどちらも行うという事が出来ますね。 これがswitchを使う理由ですか?
666 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 15:12:56 ] >>665 そもそもswitch文の存在理由を考えてみるといいかと およそほとんどのswitch文はif文で書けるわけだし、 C言語のswitch文って要らないよね、ってのは、 それはそれでひとつの考え方だが…
667 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 15:14:05 ] ぶっちゃけswitchでできることはみんなif-elseでできるし、 while、do-whileでできることはみんなforでできる。 選ぶ基準はどっちが見やすいか、書きやすいか。
668 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 15:23:30 ] >>630 正しい仕様です。
669 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 17:03:06 ] >>668 ありがとうございます。安心して使うことができます。
670 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 18:08:59 ] 店で売ってるソフトって大半がMFC製じゃないの?
671 名前:デフォルトの名無しさん [2008/02/14(木) 18:49:22 ] wchar_tの文字列をcharの文字列に変換したいのですが char buf[256]; wchar_t wbuf[] = _T("Test123あいうアイウ"); int c; setlocale(LC_ALL,"ja"); wcstombs_s(&c,buf,256,wbuf,256); ではwbufに入っている「Test123」までがbufにコピーされ、それ以降は無視されているようです。 理由を教えていただけませんか?
672 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 18:55:03 ] 変換できないワイド文字が検出されたのでその直前で変換を打ち切った
673 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 19:40:47 ] "ja"がロケール文字列として有効なのか怪しいな。 単にsetlocale(LC_ALL, "");で試してみたら? あと、本当のワイド文字列リテラルに_Tは使うな。直接L付けろ。 wchar_t wbuf[] = L"Test123あいうアイウ";
674 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 19:54:01 ] Windows だったら setlocale(LC_ALL, "japanese"); だったと思う
675 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 20:12:53 ] WCHAR
676 名前:デフォルトの名無しさん [2008/02/14(木) 21:13:33 ] >>672-675 ありがとうございます setlocale(LC_ALL, "japanese"); で解決しました。
677 名前:デフォルトの名無しさん [2008/02/14(木) 22:00:06 ] ttp://www.uploda.org/uporg1251163.zip.html (展開時9.7KB程度) Windowsゲーム向けタイマクラスを作ってみたんですが (1/60秒休んで累積の休憩時間からfpsや簡易CPU率を取得する機能) どうにも少しでも負荷がかかるとWindowsタスクマネージャで見てると まだまだCPUが余裕な割に53fpsくらいに落ち込んでしまいます。 もうすこし改良したいと思うのですが、どこか改良の余地はありますでしょうか?
678 名前:デフォルトの名無しさん mailto:sage [2008/02/14(木) 22:05:20 ] タイマーをパワーアップ
679 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 00:55:33 ] >>677 あまり詳しく見てないけど、 Sleepが1/60秒以上帰ってこないことが7回/秒あったら53fpsになるのかな? Sleepの精度なんてそんなもんだし。 理論値どおりに増加するフレームカウンタを作り、 実際に処理できたフレーム数がそれに追いついたら休む、 追いつくまでは休まず連続して何フレームでも処理する、 とすれば、平均のfpsは理論値と合う。
680 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 00:57:29 ] こんな感じで見やすくC++の標準関数載せてくれてるサイトありませんか? ttp://cham.ne.jp/piro/p_stdfunc.html
681 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:03:00 ] ttp://www.cppll.jp/cppreference/
682 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:15:08 ] >>679 「どうしても追い付けなければスキップすることも辞さない」も入れとくべきではないか?
683 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:17:05 ] バイナリファイルについての質問です。 とあるバイナリファイルの中に、12ビット単位でひとつの要素となるデータが99バイト分入っています。 これを3バイトずつファイルから読み出して12ビット単位で区切り、short型に変換して 再度バイナリファイルに書き出したいと思っています。 この場合、バイナリモードでファイルを開いて、char data[3]にread関数で3バイト格納しても シフト演算子が使えないため、上手く12ビット単位でデータを取得することができません。 何か良い案ないでしょうか?
684 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:24:09 ] >>683 「シフト演算子が使えない」と思い込む根拠は? まぁ、環境依存上等でビットフィールドを使うか、自前でビット演算するかの違いだけどね。
685 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:24:18 ] やり方は色々あるけど、とりあえず3byte読んでから4byteの整数に格納sすれば?
686 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:27:43 ] >>683 short a1 = (unsigned short)data[0] << 4 | (unsigned short)data[1] >> 4; // 前半12bit short a2 = (unsigned short)data[1] << 8 | (unsigned short)data[2]; // 後半12bit これでだめかや?
687 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:31:54 ] 訂正 short a1 = (unsigned short)data[0] << 4 | (unsigned short)data[1] >> 4; // 前半12bit short a2 = (unsigned short)(data[1] & 0x0f) << 8 | (unsigned short)data[2]; // 後半12bit
688 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:33:49 ] a1とa2もunsigned shortでいいと思う。 俺の個人的嗜好だけど。
689 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:38:19 ] a1, a2はunsigned shortにすべきだな。 それはそうと、 a1 <- data[0].u data[0].l data[1].u a2 <- data[1].l data[2].u data[2].l って並びなのかな。 a1 <- data[1].l data[0].u data[0].l a2 <- data[2].u data[2].l data[1].u って並びの可能性もありそうだが。
690 名前:デフォルトの名無しさん [2008/02/15(金) 01:47:13 ] VC++のインラインアセンブラで64bitの整数の掛算(UInt32x32To64のような物)をやりたい訳ですが どのようにすれば良いのでしょうか。 32bitなら以下で良いみたいですが64bitのやり方がわからず・・・。 int mul(int a, int b) { _asm{ mov eax, a mov ebx, b mul eax, ebx } }
691 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:54:36 ] >>685 〜688 お〜なるほど、とても助かりました。 シフト演算が使えないと言ったのは自分の知識不足です。 3バイトのデータを一気にシフト演算しようとしていました。 上手くいきました。ありがとうございます。
692 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 01:55:49 ] 解決したと思ったら、もう一個質問ができました。すいませんが、こちらもお願いします。 読み込んできたデータを次の関数で共用体に格納して、bit単位でいじってるんですが、どうも上手くとれません。 いろいろ省略していますが、以下のような感じです。 テストデータ(バイナリ) 11111111 11111111 11111111 共用体 union UNION{ unsinged char data[3]; struct { unsinged short element1 : 8; unsinged short element2 : 3; unsinged short element3 : 5; unsinged short element4 : 1; unsinged short element5 : 7; }FILED; } 処理 UNION A; read (fd , A.data , 3): printf("%d\n" , A.FILED.elemnt1); ←255が出力される printf("%d\n" , A.FILED.elemnt2); ←7が出力される printf("%d\n" , A.FILED.elemnt3); ←31が出力される printf("%d\n" , A.FILED.elemnt4); ←何故か0が出力される printf("%d\n" , A.FILED.elemnt5); ←127が表示される 4番目の要素が1と表示されるません。 これはなんででしょう?
693 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 02:00:33 ] unionの使い方間違えてないか?
694 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 02:02:51 ] >>690 64ビットの値を返すときは、EDX:EAX。 こんな関数をコンパイルさせたら、 long long mul(int a, int b) { return static_cast<long long>(a, b); } こんな出力だった。 ; Line 3 mov eax, DWORD PTR _a$[esp-4] imul DWORD PTR _b$[esp-4] ; Line 4 ret 0
695 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 02:02:56 ] >>692 試しに、printf("%u\n", A.FILED.element4)にしてみたら? >>693 適切かどうかは兎も角、間違ってはいないんじゃないか?
696 名前:692 mailto:sage [2008/02/15(金) 02:19:25 ] >>695 上手くいってないような雰囲気です。 どっか自分が処理を間違えているかもしれないので、 原因を探してみます。
697 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 02:47:09 ] 手元のgccだとちゃんと1になるけどなぁ。
698 名前:デフォルトの名無しさん [2008/02/15(金) 02:47:14 ] >>694 上位32bitがEDXに格納されるのは解りました。 それをどうやってUINT64の変数に代入するのでしょうか。 一応、以下みたく物凄く邪道な感じでやってみたり・・・ UINT64 mul64(UINT a, UINT b) { FILETIME c; _asm { mov eax, a mul b mov c.dwHighDateTime, edx //mov dword ptr [ebp-8],eax mov c.dwLowDateTime, eax //mov dword ptr [ebp-4],edx } return *(UINT64*)&c; } >mov dword ptr [ebp-8],eax >mov dword ptr [ebp-4],edx のインラインアセンブラでの正しい記述方法が解らないです。
699 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 02:54:44 ] >>698 C側で対処するならこんなんとか。 union { struct { uint32 l; uint32 h; } s; uint64 w; } c; _asm { mov c.s.l, eax mov c.s.h, edx } return c.w;
700 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 02:56:12 ] これでいいよ。 __declspec(naked) UINT64 __cdecl mul64(UINT a, UINT b) { _asm { mov eax, a mul b ret } }
701 名前:デフォルトの名無しさん [2008/02/15(金) 03:29:18 ] >>699 なるほど、適当に構造体定義してやればいいのか。 >>700 これは警告も出ないしスマートだし関数でやるならこちらが良いですね。 解決です。ありがとうございました。
702 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 04:57:05 ] >>681 ありがとうございます。C++はCの標準関数+これらが使えるのね
703 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 05:17:09 ] こんな感じでも行ける UINT64 res; _asm { mov eax, a mul b mov dword ptr[res], eax mov dword ptr[res+4], edx } return res;
704 名前:デフォルトの名無しさん [2008/02/15(金) 14:36:08 ] DLLから要求があるまで動作を停止したいのですが、どのようにしたらいいんでしょうか? メインのグローバルハンドルを共有出来ないですよね?
705 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 15:01:58 ] >>704 環境とやりたいことを具体的に。どうせ、Windowsだろうけど。
706 名前:デフォルトの名無しさん [2008/02/15(金) 15:33:29 ] すみません 似たような質問なんですが WaitForSingleObject( HANDLE hHandle, // オブジェクトのハンドル DWORD dwMilliseconds // タイムアウト時間 ); ってHANDLEがNULLになるまで待つんですか?どういう価でうごくか教えて下さい
707 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 15:36:24 ] hHandleがシグナル状態になるか、タイムアウトになるまで待つ。 シグナル状態は、そのhHandleが何かによって変わる。 CreateEventしたやつならSetEventしたやつ、とかね。
708 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 15:40:37 ] >>706 もしそれが、WinAPIのWaitForSingleObjectならば>707。 詳しくは、MSDNかAPIスレへ。 もしそうでないなら、環境を提示すること。
709 名前:デフォルトの名無しさん [2008/02/15(金) 16:13:48 ] サンクス
710 名前:デフォルトの名無しさん [2008/02/15(金) 20:52:12 ] HTMLの文字コードをS-jisにしたいのですが、インターネットエクスプローラで読み込んでS-Jisで書きだというのをC言語でできませんか
711 名前:デフォルトの名無しさん [2008/02/15(金) 20:53:50 ] 文書全体をS-jisに変換してタグを書き換えるというのでは正しく表されないことが多いです インターネットエクスプローラは変換精度が高いです
712 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:16:31 ] すいません、質問があります。 { A a; B b; } と二つのクラスを確保したとき、デストラクタの呼ばれる順番というのは仕様で 定められているのでしょうか?それとも不定なのでしょうか? よろしくお願いします。
713 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:21:15 ] デストラクタは、コンストラクタが呼び出されたの全く逆の順で呼ばれる。
714 名前:デフォルトの名無しさん [2008/02/15(金) 21:23:44 ] すいません。1次元固定配列をを積み重ねて、 2次の動的配列にしたいのですが。 data[4]固定 data[4] data[4] ↓ 動的 typedef std::vector<int> Four; std::vector<Four> data; にすれば確かに動作するのですが、 これでは両方1次も2次も動的です。 よそのスレで typedef int Fou[4]; std::vector<Four> data; とすればいいと言われましたが スレ違いでこれ以上尋ねるわけにも行かずこちらへ 来ました。 Four four; for(i=0; i<5; i++){ for(j=0; j<4; j++){ four[j]=j; } data.push_back(????); } ここの????の書き方が分かりません。 よろしくお願いします。
715 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:27:13 ] >>713 すばやい回答ありがとうございます。継承の時と同じなのですね。
716 名前:デフォルトの名無しさん [2008/02/15(金) 21:31:00 ] >714 すいません、コピーがうまくいきませんでした。 書き込みがTABを上手いこと反映してくれないみたいですね。
717 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:32:58 ] >>710-711 日本語でおk
718 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:48:34 ] >>714 push_back は無理。 構造体にするならいける。 struct Four { int four[4]; };
719 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:50:00 ] boost::array<int, 4>ってvectorの要素にできない?
720 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:19:07 ] できる
721 名前:デフォルトの名無しさん [2008/02/15(金) 23:03:34 ] 関数の中でたまにでてくる参照引数 (int & みたいな・・) ってどういうとき使うんですか?? 複数の関数内で1つの変数を使いたいときとかですか?
722 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:04:13 ] >>721 コピーコンストラクタ作るとき
723 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:05:43 ] >>721 ・ 呼び出し元の変数の値を変更したい時 ・ 巨大なオブジェクトをコピーせずに関数に渡したい時
724 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:12:44 ] //身長を整数値として読み込んで標準体重を実数で表示 #include <stdio.h> int main() { int na; int weight; printf("身長を入力してくれ:"); scanf("%d", &na); weight = (na - 100) * 0.9; printf("標準体重は%4.1f Kg", weight); return 0; } これを実行しても標準体重が0.0 Kgになるんだけどどこを改善すればいいのでしょうか?
725 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:14:04 ] >>724 ×int weight; ○float weight;
726 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:17:22 ] >>724 そのコードでちゃんと警告を出してくれるコンパイラに換えるか、そのように設定する。
727 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:36:08 ] >>725-726 こんなのも分からん馬鹿でサーセン。cygwin使ってるんだけどロクに設定もできていないもんでして。 ありがとうございます。
728 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:36:33 ] △float weight; ○double weight;
729 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:41:41 ] >>727 つ[gcc -Wall foo.c]
730 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:46:09 ] gcc -ansi -pedantic -Wall オススメ
731 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 23:47:50 ] 寧ろ、gcc -std=c99 -Wall -pedantic で。
732 名前:デフォルトの名無しさん [2008/02/15(金) 23:59:03 ] >718 構造体にしたらできました。 ありがとうございます。
733 名前:デフォルトの名無しさん [2008/02/16(土) 00:01:46 ] >719 boost::array自体が定義できないけど、必要なヘッダファイルとか あったら教えてください。 VC6.0を使っています。
734 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 00:10:27 ] >>733 まずはBOOSTでぐぐって来るんだ
735 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 00:35:37 ] VC6 でコンパイルできるかなあ。 まあ array くらいならできるか。
736 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 01:41:19 ] 環境ってMicrosoft Visual C++ 6.0って書けば分かる?
737 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:04:52 ] 考えてある程度予想してみたんですが、この考えで合ってますか? 質問大量ですみませんが (1)char *p="aaaaaaaaaaaaaaaaaaaaaaaaaaaa";やc="aaaaaaaaaaaaaaaaaaaaaaaaaaaa" ↑ポインタってアドレスを格納するのに何で文字列を入れれるの? これはどこのアドレスを入れてるの? 自動的に領域を確保して"aaaaaaaaaaaaaaaaaaaaaaaaaaaa"を入れてそのアドレスを入れてるってことですか? もしそうだとしたら、関数内で宣言してその関数からでた場合はその領域は開放されるんでしょうか? (2)cout<<sizeof(c)<<endl;とした場合4になる どうみてもaは5つ以上あるのになんで4なの? これはchar *pのサイズ(参照するアドレスを入れる領域のサイズ)だからですか? ちなみにstrlenだと35でした。 (3)sprintf(c,"aaaaaaaaaaaaaaaa");や strcpy(c,"aaaaaaaaaaaaaaaa");でコンパイルして実行するとエラー これは確保されていない領域に無理矢理文字列を突っ込もうとしてるからですか?
738 名前:737 mailto:sage [2008/02/16(土) 04:07:15 ] ごめんなさい間違えました。cを全部pとして考えてください ついでに言うと(1)の2つめはこんなの char *p; p="aaaaaaaaaaaaaaaaaaaaaaaaaaaa";
739 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:14:11 ] 文字列リテラル(" " で囲んでるやつ)は、 その文字列の置いてあるアドレスを返す。
740 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:18:58 ] ありがとうございます。ということは プログラム起動した時点でa〜zや日本語,記号の全ての文字がメモリのどこかに 自動的に置かれるってことですか? それとも"aaaa"の部分を実行した時点で文字列"aaaa"がメモリに置かれる?
741 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:19:58 ] 起動した時点で置かれてる。
742 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:20:42 ] 起動した時点で、"aaaa" が置かれる、ね。
743 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 04:27:32 ] >>741-742 ありがとうございます。今まで知らずに使ってきました。 ずっと気になってたので教えてもらえてスッキリした
744 名前:デフォルトの名無しさん [2008/02/16(土) 08:26:22 ] >735 げ、自分でコンパイルするのか。 c++標準なのかと思った。
745 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 08:33:14 ] >>744 Boostは事実上の準標準。 一部のライブラリ以外はヘッダのincludeのみで使える。
746 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 09:08:08 ] >>737 > (3) sprintf(c,"aaaaaaaaaaaaaaaa");や strcpy(c,"aaaaaaaaaaaaaaaa"); > でコンパイルして実行するとエラー > これは確保されていない領域に無理矢理文字列を突っ込もうとしてるからですか? 違う。 領域は確保されているが、文字列を突っ込めない (要は、書けない) 領域だから。 エラーになるかどうかは環境によって異なる。 素直に書き換わる環境もあるし、単に書き換わらないだけとか、全然別の場所の 文字列が勝手に書き換わるとかすることもある。 要するに、文字列の領域を書き換えるのは基本的にやってはいけない。 >>741-742 規格でそんなこと決まってたっけ?
747 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 09:25:51 ] >>746 staticな変数と同じ寿命に決まっている。
748 名前:デフォルトの名無しさん [2008/02/16(土) 09:39:06 ] HTMLファイルの構文を解析して、UTF8形式をS-JIS形式に変換するにはどうすればいいですか?
749 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 09:40:49 ] >>748 っ NKF
750 名前:748 [2008/02/16(土) 09:41:44 ] インターネットエクスプローラで読み込んで、S-jisで保存するのをプログラムでやりたいんです
751 名前:748 [2008/02/16(土) 09:43:06 ] >>749 すみません よんでませんでした NKFはやったのですが、エンコード属性が指定されていたりして、文字化けしてしまいます タグを解析する必要があるんです
752 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 09:59:59 ] >>747 そもそも static な変数の寿命なんて決まってたっけ? 例えば、自動変数の寿命ははブロックに入った時から出るまでじゃないだろ。 利用されている区間がかぶらないとわかれば、違う変数を同じレジスタに割り 当てるコンパイラは珍しくない。 それと同じで、利用されてる区間がかぶらない static 変数を同じ領域に割り 当てちゃいかんのか?
753 名前:デフォルトの名無しさん [2008/02/16(土) 10:08:02 ] インターネットエクスプローラの名前をつけて保存 (エンコード指定) だけを利用するには どうすればいいですか?
754 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 10:40:02 ] >>752 のいう同じ領域っていうのは物理メモリの領域を指してるの?
755 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 10:44:34 ] >>753 「IEコンポーネント」で調べてみては?
756 名前:デフォルトの名無しさん [2008/02/16(土) 10:52:38 ] >>753 HTMLの解析とコード変換はMSXMLとADODBを使えばできるがお前には無理。
757 名前:デフォルトの名無しさん [2008/02/16(土) 10:55:58 ] インクルードファイルだけ入れて boost::array<int,4> d; std::vector<d> data; と定義だけはエラーが出ないのはいいのですが 実際はどのように使えばいいのでしょうか。 d[0]=0; d[1]=1; d[2]=2; d[3]=3; data.push_back(d); //この部分がエラー としてもコンパイルエラーが出ます。
758 名前:デフォルトの名無しさん [2008/02/16(土) 11:06:03 ] >757 すいません。できました。別に原因があったようです。
759 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 11:31:11 ] #include <stdio.h> class Test{ public: static int ary[4]; }; int Test::ary[] = {0,1,2,3}; int main(){ printf("%d\n", Test::ary[2]); } すみません。上記のように1次元配列だと初期化できるのですが 2次元配列にするとどう記述しても初期化できません。 例えば static int ary[2][4]; }; int Test::ary[] = {0,1,2,3, 5,6,7,8}; にすると error C2040: 'ary' : 'int []' は 'int [2][4]' と間接操作のレベルが異なります。 となりますし 多次元配列のメンバ変数を初期化する方法はないものでしょうか?
760 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 11:42:03 ] >>759 int Test::ary[] = {0,1,2,3, 5,6,7,8}; これはおかしいよ。 int Test::ary[2][4] = { { 0,1,2,3 }, {5,6,7,8} }; とかじゃないの?
761 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 11:51:33 ] >>760 有難うございます。上手くいきました。 int Test::ary = { { 0,1,2,3 }, {5,6,7,8} }; や int Test::ary[][] = { { 0,1,2,3 }, {5,6,7,8} }; や int Test::ary[0][0] = { { 0,1,2,3 }, {5,6,7,8} }; で試してみて上手くいかなかったのでどうやるのかと思っていました。 [2][4]と書けば良かったのですね。
762 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:04:02 ] >>752 厳密には寿命と記憶期間は別物だが、 大抵の人は普段は記憶期間の意味で寿命という言葉を使う。