検索結果 124 件

by Bull
3年前
フォーラム: C言語何でも質問掲示板
トピック: MFC:CDialogExについて
返信数: 4
閲覧数: 1550

Re: MFC:CDialogExについて

コンストラクターの初期化リストで、配列の初期化はできるはずです。 クラスの初期化に関しましては、以前の規格(C++98, C++03)と最近の規格(C++11, C++14) とはだいぶ違っています。以前は初期化リストで配列の初期化はできなかったです。これに 対応したのは VC++14.0(Visual Studio 2015) からのようです。同様にクラスを定義する時 にメンバー変数を初期化できるようになったのもC++11からです。 コンストラクターでメンバを初期化するのは必要なことだと思っています。クラスの定義時 にもある程度初期化ができるのですが、クラスオブジェクト(インスタンス)の定義...
by Bull
3年前
フォーラム: C言語何でも質問掲示板
トピック: MFC:CDialogExについて
返信数: 4
閲覧数: 1550

Re: MFC:CDialogExについて

C++言語の文法とMFCの流儀とは区別して考えた方いいと思います。 MFCもC++のクラスライブラリですので、その範疇で作られてる はずですが。 まず、普通 MFC でダイアログを作る時は、CDialog(Ex)から派生させた クラスでダイアログを作ります。CMultiClipDlgは CDialogEx の派生 クラスでよね。CMultiClipDlgのコンストラクターで基底クラスである CDialogEx を初期化しています。 ウィザードで変数を追加した時に、初期化リストに追加されるのは、 コンストラクターでメンバー変数を初期化するのは、それが自然な事 と(Visual Studioが)...
by Bull
3年前
フォーラム: C言語何でも質問掲示板
トピック: メルセンヌ・ツイスタを使用した乱数をファイルに出力
返信数: 34
閲覧数: 3058

Re: メルセンヌ・ツイスタを使用した乱数をファイルに出力

誰も指摘してないようなので。
ベルジオン さんが書きました:乱数の要素数は5億個ほど出力したいです。

コード:

	/* ファイルのオープン */
	if ((fp = fopen(filename, "r")) == NULL) {
		fprintf(stderr, "%sのオープンに失敗しました.\n", filename);
		return(0);
	}
どうすれば良いのか何もわからないで恐縮ですが、教えていただけると幸いです
これでは出力はできないですね。
"w"を指定して、書込みモードにしないとダメですね。
by Bull
3年前
フォーラム: C言語何でも質問掲示板
トピック: プロセスのメモリセグメント一覧取得
返信数: 2
閲覧数: 473

Re: プロセスのメモリセグメント一覧取得

セグメントと言うのがちょっとよくわからないのですが、プロセス内のメモリーの情報は VirtualQuery(Ex) というAPI で調査する事が出来ます。サンプルプログラムは
http://itpro.nikkeibp.co.jp/article/COL ... /?rt=nocnt
あたりを参考にしてください。
by Bull
3年前
フォーラム: C言語何でも質問掲示板
トピック: テキストを表示させるプログラムでのアクセス違反
返信数: 18
閲覧数: 1183

Re: テキストを表示させるプログラムでのアクセス違反

最初のload関数が間違っているような気がします。 ちょっと書き直してみました。 #include <stdio.h> #include <stdlib.h> #include <string.h> int load(char ***a); int main(void) { int m, k; char **a; m = load(&a); for (k = 0; k < m; k++) { printf("%s\n", a[k]); } for (k = 0; k < m; ++k) free(a[k]); free(a); return 0; } int load(char ***a){ ...
by Bull
3年前
フォーラム: C言語何でも質問掲示板
トピック: GeyKeyboardState関数について
返信数: 4
閲覧数: 734

Re: GeyKeyboardState関数について

びせいぶつ さんが書きました:ということは、見るべきは最上位と最下位のbitのみで、それ以外のbitは何が入っているか保証されていない。
という判断でよろしいのでしょうか?
保証されていないと言うか、意味がないと言うことでしょうね。
オフトピック
普通は0になっていと思いますが、まあどっちでもいいんです
by Bull
3年前
フォーラム: C言語何でも質問掲示板
トピック: GeyKeyboardState関数について
返信数: 4
閲覧数: 734

Re: GeyKeyboardState関数について

これは何が原因なのでしょうか?自分の関数の使い方が間違っているのでしょうか? GetKeyboardState()の返却値の意味を取り違えてい いるようです。GetKeyboardState()は'TRUE'または 'FALSE'を返しますが、関数が正常終了したかどうか を意味します。キー入力が有ろうと無かろうと、普 通はTRUEを返します。keyBufには仮想キーの状態が 格納されますが、キーが押されている場合は最上位 ビットが1になります。 詳細はMSDNで確認してください。 ちょっとしたサンプルです。 #define WIN32_LEAN_AND_MEAN #include <wind...
by Bull
3年前
フォーラム: C言語何でも質問掲示板
トピック: メモリ領域の確保について
返信数: 7
閲覧数: 1243

Re: メモリ領域の確保について

/GSオプションですがVC2008にもあるようで、バッファセキュリティチェックはTrueになっていることを確認しました。 ただそれでもVC2008では実行出来てしまい、VC2012では実行エラーになるのは何故なのでしょうか? なにか/GSの機能がVC2012により厳しくなるようなことがあったのでしょうか? VC++ 2008でエラーにならない理由ですが、前にも書きましたが、最適化すると不正アクセスするコードは実際には生成されません。ですので、main()の最後のセキュリティのチェックに引っかからないという事ですね。最適化をやめるとエラーになります。 では、なぜVC++ 2012でエラーが出る...
by Bull
3年前
フォーラム: C言語何でも質問掲示板
トピック: メモリ領域の確保について
返信数: 7
閲覧数: 1243

Re: メモリ領域の確保について

規格ではオブジェクト(変数・配列)をどのように確保 するかは規定されていませんので、あまり気にする必要 は無いと思います。コンパイラーによって違いが出てく ると思われますが、このような不正アクセスのケースで は、コンパイラーがどのようにオブジェクトを配置する かを把握しているとデバッグがしやすいかも知れません。 VCで例外が発生するのは/GSオプションでセキュリティの チェックが組み込まれているためのようです。コンパイル 結果を見てみると、 str_A[40] = '\0'; /* アクセス違反 */ memcpy(str_A,"01234567890123456789012345678901...
by Bull
3年前
フォーラム: C言語何でも質問掲示板
トピック: Visual C++のバックアップを使うには
返信数: 2
閲覧数: 803

Re: Visual C++のバックアップを使うには

やはり普段お世話になっていないことは情報が不十分ですね。
Visual Studio 2013の場合ですが、異常終了したあと、再度
起動すると自動的にリカバリーしてくれるようです。
これは今確かめたので、間違いないです。
by Bull
3年前
フォーラム: C言語何でも質問掲示板
トピック: Visual C++のバックアップを使うには
返信数: 2
閲覧数: 803

Re: Visual C++のバックアップを使うには

私の知る限り、Visual Studioのバックアップは修正を加えたソースを既定のフォルダーに定期的に
保存するだけの機能のようです。また、Visual Studioで保存した時点で、バックアップしたソース
は削除されます。保存しないでVisual Studioが異常終了した時のみ、バックアップしたファイルが
残っています。幸か不幸かまだバックアップの機能に助けられたことがないので、この認識は間違っ
ているかもしれませんが...。
ちなみに、バッグアップされるフォルダーは"Projects"と同じ階層の"Backup Files"です。
by Bull
3年前
フォーラム: C言語何でも質問掲示板
トピック: 同じシグネチャの関数ポインタを返す関数のシグネチャをtypedefしたい
返信数: 4
閲覧数: 861

Re: 同じシグネチャの関数ポインタを返す関数のシグネチャをtypedefしたい

既に回答がありますが、C/C++ではおそらく出来ないと思われます。 代案として、関数の返却値を適当に定義しておいてキャストしてしまう方法が考えられます。 例えばあまりきれいではありませんが #include <stdio.h> #include <stdlib.h> typedef void (*Handler(int))(int); Handler* func0(int); Handler* func2(int n) { printf("IN func2\n"); if (n <= 0) { return NULL; } else { return (Handler *)func0; } }...
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: ファイル名を変更するシステム
返信数: 29
閲覧数: 3780

Re: ファイル名を変更するシステム

Windows の API には LCMapString() というのがありまして、全角⇔半角の変換 なんかをやってくれるんですが、この場合は使えないようですね(なんかいい 方法があるかもしれませんが)。昔作って某所へ投稿したプログラムを少し、 かえてみました。 //全角カタカナを半角に変換する #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <stdio.h> #include <mbctype.h> #include <mbstring.h> int katakana_han(unsigned char *src, uns...
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: LoadLibraryについて
返信数: 6
閲覧数: 1324

Re: LoadLibraryについて

コンパイラの違いでしょうか? 理由も知りたいので、応えてくださったらうれしいです。 DLLでの関数名はコンパイラーによって違うようです。 VCならご提示のプログラムでうまく行くようです。 @以降は __stdcall 特有でスタックに積むバイト 数をあらわしています。"@0"は引数が無い、"@4" なら4バイトの引数が一つ、"@8"なら4バイトの引 数が二つないしは8バイトの引数が一つであると言 うことです。はっきりとした、理由は分りませんが、 __stdcall にすると、呼び出された関数でスタック ポインタを調整するので間違わないようにするため と、聞いたことがあります。__cdecl(...
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: Windows8.1 での winhlp32.exe について
返信数: 2
閲覧数: 848

Re: Windows8.1 での winhlp32.exe について

ありがとうございます。
やはり Windows Update の影響でしたか。

いろいろ検索したのですが、Google では引っかかりませんでした。
Microsoft コミュニティはほとんどノーチェックだったので、今後は
たまには、参照しようかと思います。
いいところを紹介していただきました。

ともあれ、原因がわかって良かったです。
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: Windows8.1 での winhlp32.exe について
返信数: 2
閲覧数: 848

Windows8.1 での winhlp32.exe について

環境は Windows 8.1 64Bit です かつて使われていたヘルプファイル(拡張子が.hlp)は Windows Vista 以降は 標準では表示できません。表示しようとすると、現在サポートされていない旨の メッセージがでて、Microsoft のサイトに誘導されます。そこでダウンロードし てインストールすれば、めでたく古いヘルプファイルも表示できるようになります。 しかし、私のところではうまく表示してくれません。以前は表示できていたよう な記憶があるので(Windows 8.1も公式にファイルが用意されています)、ネット で検索してみても、それらしい情報はありません。唯一海外のブログ...
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: ペイントというアプリケーションへの画像貼り付け
返信数: 1
閲覧数: 503

Re: ペイントというアプリケーションへの画像貼り付け

ペイントのウィンドウを探して、SendInput()を使用して Ctrl+V を送る、というのはどうでしょうか?
あるいは、WM_PASTE をポストする、という方法もあります。
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: ダイアログウィンドウにメニューバーを作るには?
返信数: 8
閲覧数: 1775

Re: ダイアログウィンドウにメニューバーを作るには?

Visual Studio でビルドする場合は、"{" を "BEGIN" に "}" を "END" に変更してみてください。
基本的には、"{ }" でもコンパイルできるはずなんですが、"BEGIN" と "END" を使う方が
無難ですね。

CreateWindow() あたりのバグは既に指摘されているとおりですね。
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: ダイアログウィンドウにメニューバーを作るには?
返信数: 8
閲覧数: 1775

Re: ダイアログウィンドウにメニューバーを作るには?

akindo さんが書きました:下記のサイトの方法を試してみたのですが、どうやらリソースの書き方が
現在の方式とあっていないようでそのままやるとエラーが出ます。
http://wisdom.sakura.ne.jp/system/winap ... win84.html
リソーススクリプトに

コード:

#include <windows.h>
を加えてみてください。
それで、コンパイルができるようになるはずです。
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: Debugビルド時、GetCurrentDirectory()の返り値がおかしい
返信数: 5
閲覧数: 1033

Re: Debugビルド時、GetCurrentDirectory()の返り値がおかしい

プロジェクトのプロパティでデバッグ/作業ディレクトリはどうなっていますか?
当方ではGetCurrentDirectory()で取得するディレクトリはそこで指定したものと
同じになるようです。デフォルトでは "$(ProjectDir)" ですが、直接指定することも
可能で、へにっくす さんがおっしゃるように Windows は大文字小文字を区別しま
せんので、存在するディレクトリならば、そのまま実行できます。
または、 "$(ProjectDir)" がどうなっているかですね。
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: Debugビルド時、GetCurrentDirectory()の返り値がおかしい
返信数: 5
閲覧数: 1033

Re: Debugビルド時、GetCurrentDirectory()の返り値がおかしい

こちらも質問者さんと同じような環境ですが、現象は再現しません。 現象を再現できる最小限のプログラムを提示することは可能ですか。 こちらで使用したプログラムは以下のようなものです。 #include <windows.h> #include <stdio.h> #include <string.h> int main(void) { const int MAX_LENGTH_PATH = 256; char dir[MAX_LENGTH_PATH]; memset(dir, '\0', sizeof(dir)); GetCurrentDirectory(sizeof(dir), dir); pr...
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: qsortの利用
返信数: 10
閲覧数: 1621

Re: qsortの利用

4 45 55 45 95 1 65 95 90 60 2 65 60 70 70 3 90 80 65 65 としたいです。 こうゆうことでしょうか #include <stdio.h> #include <stdlib.h> int cmp(const void *p, const void *q) { return ((int *)p)[1] - ((int *)q)[1]; } int main(void) { int i; int data[][5] = { { 1, 65, 95, 90, 60, }, { 2, 65, 60, 70, 70, }, { 3, 90, 80, 6...
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: 32bitのwindows 7 のプログラムに64bitのdll
返信数: 8
閲覧数: 4366

Re: 32bitのwindows 7 のプログラムに64bitのdll

ちょっと書き漏らしました。

暗黙的リンクならば Dependency Walker を使用してリンクしている DLL は特定できます。
明示的リンクでも、ある程度は調査できます。
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: 32bitのwindows 7 のプログラムに64bitのdll
返信数: 8
閲覧数: 4366

Re: 32bitのwindows 7 のプログラムに64bitのdll

実行環境が良くわからないのですが、64bit Windows で 32bit Exe を実行する場合と考えてよろしいですか?

まず、DLL のリンクには明示的リンクと暗黙的リンクがあるのはご存じだと思いますが、32bitのEXEから64bit
のDLLをコールしようとした場合、明示的リンクでは、LoadLibrary() でエラーになりますし、暗黙的リンクでは
プログラムの開始時にエラーになると思います。どちらもハングアップすることはないはずです。

プログラムがハングアップするのは別の原因ではないのですか?
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: ファイルの入出力に関して(テキスト)
返信数: 11
閲覧数: 1560

Re: ファイルの入出力に関して(テキスト)

そうですね。そういう理解でいいと思います。
ただファイルの終わりではなく、何らかのエラーを検出した場合も
fgetc()関数は EOF を返します。このときは、feof()関数は0 を返
し、ferror()関数が非0 を返します。
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: ファイルの入出力に関して(テキスト)
返信数: 11
閲覧数: 1560

Re: ファイルの入出力に関して(テキスト)

ちょっと違うかな まず fopen() 関数が返すのは FILE * です。どこかに FILE型の オブジェクト(一般的には構造体)があるわけですが、FILE型には "ファイル位置表示子"と"ファイル終了表示子"が含まれます。 feof() 関数はこのファイル終了表示子を調べているだけです。 ファイルを読み込んで初めてファイルが終了したかどうかわかるの で、ファルを読まないうちにファイル終了表示子がセットされるこ とはありません。 つまり、fgetc()関数が正常終了した場合はファイル終了表示子が セットされることはないです。 ファイル位置表示子はこれから読もうとしている文字の位置が格納 され...
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: C#のコンソールアプリケーションとDXLibでノベルゲームを作ってますが
返信数: 3
閲覧数: 1209

Re: C#のコンソールアプリケーションとDXLibでノベルゲームを作ってますが

ノベルゲームなら、Console.KeyAvailable と Console.ReadKey() で間にあうような気もしますが、 DxLib 風のキー入力関数って、こういうことでしょうか? using System; using System.Threading; using System.Runtime.InteropServices; class prog { [DllImport("user32.dll")] public static extern short GetAsyncKeyState(int key); static void GetHitKeyStateAll(int[]...
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: getchとgetcharにおける改行
返信数: 4
閲覧数: 3519

Re: getchとgetcharにおける改行

サモサ さんが書きました:この他にメリットはあるでしょうか?
メリットと言えるかどうかわかりませんが、getch() は入力をエコーバックしません。
例えば、パスワード入力などの場合 getchar() ではエコーバックしてしまうので、
何らかの処置が必要になります。

コンソール入出力関数のメリットは特別には考えとことがなかったです。
前にも書きましたが、目的が違うので使い分けが肝要ではないでしょうか。
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: getchとgetcharにおける改行
返信数: 4
閲覧数: 3519

Re: getchとgetcharにおける改行

getch() と getchar() では目的が違います。 getch() がコンソール入出力関数であるのに対し getchar() は標準入出力関数です。 getch() がリダイレクトすることは出来ないのに 対し、getchar() はリダイレクトされていれば、 ファイルからの入力も出来ます。 getchar() は文字の入力のための関数で、多くの 場合行単位の入力になります。Enterキーを押した と言うことは、行の終わりを意味するので、改行 (\n) に変換されます。 一方 getch() はそういった変換は一切行われません。 文字の入力と言うよりも、キーの入力といった方が いいかも...
by Bull
4年前
フォーラム: C言語何でも質問掲示板
トピック: たろうXX
返信数: 3
閲覧数: 681

Re: たろうXX

mecabは使ったことがなかったのですが、興味があったのでダウンロードしてみました。
installすると、sdkというフォルダーができて、その中のヘッダーとライブラリをVisual Studioで
プロジェクトのVC++ディレクトリまたは、C/C++の追加のインクルードディレクトリとリンカーの
追加の依存ファイルに設定すればビルドはできると思います。

実行時にはDLLが必要になるようですので、同じくbinというフォルダーのDLLを実行ファイルと
おなじフォルダーにコピーすればいいと思います。

詳細検索ページへ移動する