[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 08/27 18:32 / Filesize : 189 KB / Number-of Response : 742
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.37【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2007/05/06(日) 15:29:45 ]
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.36【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1175436073/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm


560 名前:デフォルトの名無しさん mailto:sage [2007/05/24(木) 21:19:31 ]
>>557
exeでも参照できるよ







.NET Frameworkならね

561 名前:560 mailto:sage [2007/05/24(木) 21:22:02 ]
ていうかVC初心者スレ池

562 名前:デフォルトの名無しさん mailto:sage [2007/05/24(木) 23:26:48 ]
「構造体とクラスは無関係」という人をよく見かけるけど、
構造体からヒントを得て、クラスという概念を作ったわけではないの?
構造体使ってて、あー、こういう風にしてーなー、と思ったところを、
クラスという形で実現したのであれば、
無関係ってちと言い過ぎじゃないかなー、とか思うんだけど。

563 名前:デフォルトの名無しさん [2007/05/24(木) 23:29:18 ]
switch(event)
{
case1:
foo;
case2:
bar;
default: ←100行目
}

if( !p1)
{
・・・
GOTO Test;

Test: ←100行目
}
gcc version 4.1.2 で、
上のように、default: や Test: の後が空行のまま } がくると、次のようなエラーがでます。

handle.c:100: error: label at end of compound statement

これは仕様なのでしょうか?
default: は消し、 Test: は {}の外にうつして回避したのですが、それで正しいでしょうか。
アドバイス、よろしくお願いします。

564 名前:デフォルトの名無しさん mailto:sage [2007/05/24(木) 23:31:09 ]
>>563
ラベルの後には文が必要です。
;(セミコロン)だけでも付けましょう。

565 名前:563 mailto:sage [2007/05/24(木) 23:39:39 ]
>>564
セミコロンをつけたところ、コンパイルがとおりました。
どうもありがとうございました。

566 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 00:35:43 ]
www.uploda.org/uporg822044.c
この選択ソートのプログラムをswap関数を用いて作り変えたいと思い、
下記のようにしてみたんですが、うまくいきません。
www.uploda.org/uporg822047.c

何が悪いのか教えてください。お願いします。

567 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 00:37:39 ]
swapに渡されるのは引数のコピーだ

swap(int* a,int* b);

568 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 00:56:53 ]
色々やってみましたが、分かりませんでした。
よろしければ正解例を示していただけないでしょうか。
お願いします。



569 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 01:02:35 ]
よくみたら内部で配列を交換してんのか

つうかコレコンパイルできなくね?

面倒だからとりあえず
int i,j,k,work,num,a[100];
をmainの外に出せば動くんじゃね

570 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 01:06:42 ]
>>569
はい、566の下のソースはコンパイルできていません。
mainの外に出してもできないようです。

571 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 01:19:43 ]
mainの外に出したら動いたわけだが、、、

572 名前:デフォルトの名無しさん [2007/05/25(金) 01:45:14 ]
>>570www.uploda.org/uporg822246.c

573 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 05:35:49 ]
mciSendStringでnotify(+MCI_NOTIFY_SUCCESSFUL)で
ループ再生を行っている時、
まれにループに入るタイミングでループされず、
永遠とnotifyが投げられビジー状態になってしまいます。

100回に1回も起こらないので、原因は良く分かりませんが、
もしかしたら、曲を変えようと前の曲をstop、closeし、
新しい曲をopen、playするのと同じぐらいのタイミングで
notifyが来た時に起きているのかもしれません。

対策方法などがありましたら、教えてください。

574 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 06:26:54 ]
再生するファイルの種類は何かね?あとOS

575 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 08:12:19 ]
×永遠と
○延々と

576 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 09:01:26 ]
>>562
C++のクラスはSimulaからのインスパイヤ

577 名前:573 mailto:sage [2007/05/25(金) 09:22:55 ]
>>574
ファイルはmidi、OSは9xです。

>>575
素でやってしまいました・・

578 名前:573 mailto:sage [2007/05/25(金) 09:34:53 ]
後、もちろんmciSendStringの戻り値は0(成功)です。
音楽を変えるためstop、closeした後、
前の曲のnotifyが来てしまいおかしくなるのかもしれません。

notifyが連続で来る事は普通は無いので、
その時は、playをsendしないようにする方法とかもあると思うんですけど。



579 名前:デフォルトの名無しさん [2007/05/25(金) 10:20:06 ]
stringはあまりよくないと聞いたことがあるのですが
charの配列を使うよりstringを使ったほうがいいですよね?

580 名前:566 mailto:sage [2007/05/25(金) 10:50:50 ]
>>572
ありがとうございました。
保存したので、もう消していただいてもかまいません。

581 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 11:06:24 ]
>>579
好きにすればいいと思うよ。
配列とnew/delete演算子と
テンプレートクラスの勉強が済んでいる前提で。

582 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 11:54:11 ]
>>579
よくない理由を問い詰めておけ。

583 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 12:21:45 ]
1方向Listを作っています。参考書等で調べたのですが
削除関数の部分をどう記述すれば良いのか分からないので教えてください。
uproda11.2ch-library.com/src/116479.c

584 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 12:30:56 ]
>>583
まずは自分で書けよ。今のソースじゃどういう動作にしたいのかもわからん。

585 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 14:03:27 ]
もうソース見えん。

削除ってのはさ、
A→B→C のBを消すときにAの指してる先をCにしてBを消せばいいわけだ。
でも片方向でBの前を探すのは面倒だから、Bが指してるCの内容を
そっくりBにコピーしてCを消す、というトリックが使える場合があるぞ。

586 名前:デフォルトの名無しさん [2007/05/25(金) 15:20:22 ]
mfcについて教えてください。

通信受信プログラムで受信データをエディットコントロール(複数行表示)に表示しているのですが、
以下のコードでは、エディットコントロールに文字列を追加する際に必ずスクロールされてしまいます。
スクロールされない方法を教えてください。

int iLen = edit->GetWindowTextLength();
edit->SetSel(iLen, iLen);
edit->ReplaceSel("Hello\n");

WinXP & Visual Studio 2003 & mfc7です。

587 名前:気まぐれアナスイ mailto:お腹いっぱい@気まぐれアナスイ [2007/05/25(金) 15:31:32 ]
!(Φ_Φ+){???}
"hello"


  #####
  #
  #
  #
  #

588 名前:気まぐれアナスイ mailto:お腹いっぱい@気まぐれアナスイ [2007/05/25(金) 15:37:31 ]
!(Φ_Φ+){???}
"hello"


  #####
  #
  #
  #
  #



589 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 15:38:59 ]
>>586
MFCスレへどうぞ。
つーか、LineScrollで元のとこに戻せばいいんでないの?

590 名前:デフォルトの名無しさん [2007/05/25(金) 16:24:49 ]
>>589
レスありがとうございます。

LineScrollで戻すと、1行書くごとに「下へスクロール→上へスクロール」となり、上下にスクロールが発生してしまい
とても見づらくなってしまうのです。

「スクロールなし」でエディットコントロールに文字列を追加できないものでしょうか?

591 名前:気まぐれアナスイ mailto:お腹いっぱい@気まぐれアナスイ [2007/05/25(金) 16:57:37 ]
!(ΦyΦ+){???}

『のだめカンタービレ』

592 名前:気まぐれアナスイ mailto:お腹いっぱい@気まぐれアナスイ [2007/05/25(金) 16:58:53 ]
!(ΦyΦ+){???}

『のだめカンタービレ』

593 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:12:41 ]
初めまして、VC++のC++/CLIのフォームアプリケーションについて質問があります。

今、LimeChat 2 の様なアプリを作っていています。
そのアプリのテキストボックスには、カーソルが表示されていません。
どのようにすれば、カーソルを表示させないようにできるのでしょうか?

また、TreeViewの再描画を一時停止させたいのですが、どうすればよいのでしょうか?

594 名前:つ[SetRedraw()] mailto:sage [2007/05/25(金) 17:13:25 ]
>>590
誘導されているんだから更に質問するなよ。

595 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:14:57 ]
>>593
C++/CLIは最早C++でさえないので該当スレへ。つーか、プロパティだか属性だか知らんが編集可否とかカーサ表示有無とかないの?

596 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:21:17 ]
>>595
それが無くて困ってますorz

該当スレ = C++/CLI について語ろうぜ Part2
で質問してもいつもスルーされてしまうんですorz

597 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:23:06 ]
そりゃ、明らかにC++/CLIの話題じゃなくて、.NET FrameworkなりCLRなりの話題だもん。

598 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:28:00 ]
自分でスレ立てるしかないですかね?



599 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:36:19 ]
>>598
やめれ。

600 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:37:26 ]
>>598
やめれ。

601 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:40:29 ]
>>598
やめれ。

602 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:40:44 ]
やめときますorz
どこに書き込んでも
>こんな奴がC++出来るんだぜとかいってると思うとため息出るな・・・
とか
>(゚Д゚)
みたいに馬鹿にされますorz

これってそこまで初歩的な質問ですかね?

603 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 17:59:05 ]
>>602
ヘルプぐらい見ろよ。
MSDNで「TreeViewメンバ」一覧とか見れば、
BeginUpdate ツリー ビューの再描画を無効にします。
とか思いっきり書いてあるだろ。
日本語読めないの?

604 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:00:21 ]
>>602
> そのアプリのテキストボックスには、カーソルが表示されていません。
> どのようにすれば、カーソルを表示させないようにできるのでしょうか?
>
とりあえず、この文面だとカーソルを消したいのか表示させたいのか分からん。
あとこの場合は、マウスの移動とともに表示される矢印のマウスカーソルと、
テキストの間に表示される縦棒の二つの意味にとれるので、
そこも説明する必要あり。

605 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:15:45 ]
>>603
あったんですか(゚Д゚)

>>604
テキストの間に表示される縦棒を消したいです。

606 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:30:52 ]
>>602
スレ違いって指摘されているの判る?
それでも居座るような状態だから馬鹿にされるんだよ。

607 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:54:14 ]
俺はこのスレでC++/CLIを出してきても構わないと思うけどな
まあ答える奴は少ないだろうとも思うけど

602が答えを得られないのは602自身の問題

608 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 18:58:10 ]
片っ端からマルチかよ。
そりゃ答えてもらえないわけだ。



609 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 20:36:14 ]
構造体の末尾にパディングを入れてサイズを固定にしたいのですが、

struct hoge {
  int a;
  int *b;
  hoge *c;
  char padding[???];
};

例えば sizeof(hoge) == 16 になるようにしたい場合、??? にはどう書けばいいでしょうか?
16 - offsetof(hoge, padding) とか書ければいいのですが。

610 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 20:50:08 ]
paddingまでが詰まってる前提なら
16-sizeof(a)+sizeof(b)+sizeof(c) でいいんじゃね

試してないけど

611 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 20:58:19 ]
16バイトの配列との共用体にするとか

union hoge{
  char size[16];
  
  struct {
    int a;
    int *b;
  };
};


612 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 21:06:47 ]
テキストに入力できる状態なら
縦棒消すの無理じゃない?

613 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 23:01:17 ]
なぜなのかよく分かりませんが、LimeChat 2というIRCでチャットをするためのソフトでは、点滅しているカーソルが表示されていないんです

614 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 23:13:11 ]
キャレット表示されてないと入力編集がものすごく難しくないか?

615 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 23:14:43 ]
チャットソフトだからログ表示部品と発言入力部品が別なんだろ。
でログ表示部品にキャレット(カーソル)が出てしまうのがウザイと。

616 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 23:21:29 ]
おまえらどこか一箇所でやれよw

617 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 23:27:44 ]
ぐぐったらこんなのが引っかかった
BOOL HideCaret(HWND);
つーわけで消したいEditBoxのhwndを放り込んで使ってみよう

618 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 04:34:05 ]
HideCaret(static_cast<HWND>(this->textBox1->Handle.ToPointer()));
でなんとかキャレットを非表示にできそうです。

しかし、外部シンボル ""extern "C" int __stdcall HideCaret(struct HWND__ *)" (?HideCaret@@$$J14YGHPAUHWND__@@@Z)" は未解決です。
というリンクエラーが出てしまいましたorz



619 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 06:05:17 ]
>>593=>>602=>>605
.NETの話はVCスレ行けよ
キャレット(カーソル)うんぬんとかWin32APIスレ行けよ

620 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 08:26:09 ]
>>618
user32.libをリンクしろ

>>619
環境依存ネタOkなスレだからありだろ

621 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 08:50:12 ]
環境以前にスレ違いなわけだが

622 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 10:32:12 ]
シフト演算(<< >>)ではなく、ローテートを行いたい場合、どのようにすればよいのでしょうか?

623 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 10:41:59 ]
左右シフト演算をORで結合、かな。
コンパイラに拠っては、rotに展開されるであろう
組み込み関数とかがあるかもしれないけど。

624 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 10:49:45 ]
組み込み関数あるね
unsigned long _lrotl(unsigned long value, int shift) 符号なし long 型整数の各ビットを左にローテートします。
unsigned long _lrotr(unsigned long value, int shift) 符号なし long 型整数の各ビットを右にローテートします。
unsigned int _rotl(unsigned int value, int shift) 符号なし整数の各ビットを左にローテートします。
unsigned int _rotr(unsigned int value, int shift) 符号なし整数の各ビットを右にローテートします。


625 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 11:44:25 ]
>>620さんのおかげで解決しました。ありがとうございました。

>>621
スレ違いなら消えますorz

626 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 11:55:41 ]
何度もスレ違いって言われてるだろ。
さっさと消えろやこの世からもな!

627 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 12:15:39 ]
    _、,、
  θ《▼》θ                                  ; ,;从 , ガッ
  ノリ#゚−゚リ)((ニ(ニ(l     チュドーン   ..,  ''"´"''': ; .     、゙,',::、⌒::;.,'."));": ←>>626
  ( ノ つ|_||三三二弌ll============lニlll),,'   . : ;  _,; "   `.、:.(`:'⌒::"`.;`⌒゙":ドカーン
  《ソ|__/|ニ〃l,=l┘               "'' -''''"´    ;;.゛;((:;;`';::,");;";;;))`.;
    し'ノ                              ゛;((:;;`::"`.;`⌒゙);;";;;))`.;
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
おまえが死ねよ
価値がないのはおまえだろw

628 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 12:24:24 ]
そもそもCLIってなんですか?なにに使うんですか?



629 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 12:27:21 ]
>>628
ja.wikipedia.org/wiki/%E5%85%B1%E9%80%9A%E8%A8%80%E8%AA%9E%E5%9F%BA%E7%9B%A4

630 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 12:31:16 ]
.NETプログラミングのことですか?

631 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 13:03:03 ]
managed C++ とどう違うの?

632 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 13:29:01 ]
>>630
大体あっている
.NET Frameworkを標準規格化した際の名称がCLIとでも思えばいい

>>631
構文がましになった

633 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 19:39:54 ]
VS2005EEです。
Wktk(void(*func)(void)) というような関数に
クラスメソッド void cKwsk::Osieru()
のポインタを渡したいのですがC2440エラーでうまくいきません。
どのようにキャストすれば良いのですか?

634 名前:デフォルトの名無しさん [2007/05/26(土) 19:44:45 ]
Visual Studio 2005にて、以下のようなコードを書いたのですが

const TCHAR OutBuff[] = _T("D:\\TEST\\アイウエオ.txt\n");
const TCHAR OutFile[] = _T("abc.txt");

_tfopen_s(&fp, OutFile, _T("w+, ccs=UNICODE"));
_fputts(OutBuff, fp);
fclose(fp);

これで出来上がったabc.txtの中身を見ると
D:\TEST\[EOF]

要するにカタカナの「ア」以降出力されません。
これはどうすればうまくいくでしょうか?

環境はVS2005 SP1 WindowsXP SP2
ワイド文字を使用するでコンパイルしています。


635 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 19:49:39 ]
>>633
そのメンバ関数を静的メンバ関数にすればいい。

636 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 19:51:15 ]
>>633
キャストできない。
クラスメソッドでない普通の関数を噛ませるか、Wktkの方を変えるしかない。

637 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 19:52:25 ]
>>634
ロケール

638 名前:634 mailto:sage [2007/05/26(土) 20:13:49 ]
>>637
うまくいきました。ありがとう。



639 名前:633 mailto:sage [2007/05/26(土) 20:56:47 ]
静的メンバ関数にすることで対応しました。
レスありがとうございました。

640 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 21:13:31 ]
誰だよ
>環境以前にスレ違いなわけだが
みたいな糞逝ったのは

641 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 01:49:39 ]
atlのT2Wを使うにしても、mbstowcs系を使うにしても
マルチバイトで"あいう"っていうのをワイド文字列strに変換したばあい、
str[0] = "あ", str[1] = "い", str[2] = "う"と言うふうにはならないんです
変換前と変換後で文字列が対応するように変換するにはどうしたらいいでしょう?


642 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 01:55:05 ]
え?なるだろ?
ならないっていうなら、現状どうなってるんだ?

643 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 01:55:30 ]
すいません、マルチバイトに変換してましたorz
ちゃんとT2W使った上手く変換できました

644 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 03:37:25 ]
初心者ですが質問にお答えいただけるとうれしいです。
配列に直接機械語を埋めて関数ポインタで実行させたいのですが
よくわかりません。
環境はPentium4、WindowsXP、BorlandC++Compiler。
//ソース
#include <stdio.h>

int main(void)
{
   int (*func)(void);
   const char ch[] = {
      0xb8, 0x45, 0x23, 0x01, 0x00, 0xc3
   };
   func = (int(*)(void))ch;

   printf("%X", (*func)());

   return 0;
}
何かが決定的に間違っているのにちゃんと12345と表示されます。
アセンブリで
mov ax, 123h
ret
と書いてnasmでアセンブルすると
B8 23 01 C3と機械語が吐き出されます。
これをそのままch[]に埋め込んでもエラーで正しく実行されません。
axレジスタって16Bitですよね?なぜか32Bitで補正してやると正しく実行されるんですよね。
きっと、正しくできていると思い込んでいて実際には偶然こうなっただけなのでしょうけど
なぜ、これが出来て、普通にアセンブルして出来た機械語が実行できないのでしょうか?
もしかして、こういう行為自体が土台不可能な話で、今回出来たのはまったくの偶然ということでしょうか?
教えていただけないでしょうか、よろしくお願いします。

645 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 03:58:41 ]
なんで初心者なのにhackのマネ事してるんだ

646 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 04:28:36 ]
>>644
C++言語の範疇を逸脱した内容なのでスレ違い。
アセンブラ関連のスレへどうぞ。

647 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 04:36:01 ]
masm系ならuse32

648 名前:644 mailto:sage [2007/05/27(日) 04:37:26 ]
>>645
hackといわれてもよくわかりませんが
ただ、興味があったとしか申し上げられません。

>>646
こちらC言語です。どうぞ。
失礼。そうですね。ただCでこういうことが可能かどうかを知りたかっただけでして。
出来るか出来ないかだけでも教えて頂きたいと思っているのです。
あとはアセンブリでも機械語でも自分で調べて何とかしますので。



649 名前:デフォルトの名無しさん [2007/05/27(日) 06:09:24 ]
すいませんPGMファイルの読み込みの関数を作っているのですが、
im[j][i]=tempのところで落ちます。どうすればいいですか?おしえてください。
/*-------------------------------------------------------
PGMファイルの読み込みの関数
--------------------------------------------------------*/
int** read_PGM( FILE *fp, int *pw, int *ph){


int **im;

int i, j;
int temp, bright;


printf ("PGMの読み込み開始\n");

/*----------------------
P2形式のファイルか判別
-----------------------*/

if ( fgetc(fp) != 'P' || fgetc(fp) != '2' ){

printf("このデータはP2形式PGMファイルではありません。\n");
return (NULL);

}




650 名前:デフォルトの名無しさん [2007/05/27(日) 06:10:50 ]
/*----------------------
幅のデータの読み込み
----------------------*/

if ( fscanf( fp, "%d", pw) != 1 ){

printf ("幅の読み込みに失敗しました。\n");
return (NULL);

}

printf("幅のサイズは%dです。\n", *pw );


/*----------------------
高さのデータの読み込み
----------------------*/

if ( fscanf( fp, "%d", ph) != 1 ){

printf("高さの読み込みに失敗しました。\n");
return(NULL);

}

printf("高さのサイズは%dです。\n", *ph );





651 名前:デフォルトの名無しさん [2007/05/27(日) 06:12:24 ]
/*-----------------------
輝度のデータの読み込み
-----------------------*/

if ( fscanf(fp, "%d", &bright ) != 1 ){

printf("最大輝度値の読み込みに失敗しました。\n");
return(NULL);

}

if ( bright != MAXVALUE ){

printf("最大輝度値が%dではありません。\n", MAXVALUE );
return(NULL);

}

printf("最大輝度値は%dです。\n", bright );


/*------------------------
ヘッダーの取得完了
------------------------*/

printf("ヘッダーの取得完了\n");





652 名前:デフォルトの名無しさん [2007/05/27(日) 06:14:21 ]
/*----------------------------
メモリの確保
----------------------------*/
if ( (im = (int**)malloc(sizeof(int*) * (*ph))) == NULL ) {

printf("メモリが確保できません。\n");
return (NULL);

for ( j=0; j< *ph; j++){

if( (im[j] = (int*)malloc( sizeof(int) * (*pw) )) ==NULL ){

printf("メモリを確保できません。\n");
return(NULL);

}

}

}


printf("メモリ領域が確保できました。\n");




653 名前:デフォルトの名無しさん [2007/05/27(日) 06:15:21 ]
/*-----------------------------
画像データの読み込み
-----------------------------*/

for ( j=0; j< *ph; j++ ){
for ( i=0; i< *pw; i++ ){

if ( fscanf(fp,"%d", &temp) != 1 ){

printf("画像データの取得に失敗しました。\n");
return(NULL);

}

im[j][i] = temp;

}
}

return (im);

}


654 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 08:28:39 ]
>>649
・長いソースはアップローダを使ってくれ。
・その画像ファイルにはコメントは含まれていないか?
試しにエディタで開いてみて、コメントがあるようなら削って味噌。
・そもそもなんでlibpgmでも使わないんだ?

>>648
>647でも指摘されているが、CPU側の事情で巧く動かないだけ。
(x86)アセンブラの勉強をすれば容易に解決する問題。

655 名前:644 mailto:sage [2007/05/27(日) 11:15:59 ]
>>654
了解です。
「はじめての」シリーズがアマゾンで評価高かったので見てみようかと思います。
あとは、インラインアセンブラで関数作ってその部分だけバイナリで吐き出させて
再び埋め込んでみるのもいいかもしれないです。
シェルコードの解説サイトにソースがあったので使えそうです。
スレ違いな感じですがいろいろ有難うございます。

656 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 12:40:27 ]
>>649
おそらくポインタ関係でミスってる、てことは分かるでしょ?
>>652 で im != NULL のときどうなるか考えてみ。


657 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 17:46:45 ]
>>644
EAX の上位ビットをクリアすればいけるかも

658 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 18:09:00 ]
>>644のは ret のC3がeaxレジスタにmovするときの数値で食われてるから
返ってこないんだよ。



659 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 18:24:25 ]
>>644
IMMが32bitの場合と16bitの場合を区別するために、
mov ax, 0x123
では、0x66, 0xb8, 0x23, 0x01
とプリフィックスを入れる必要があるみたい。

660 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 18:29:14 ]
まぁ厳密には関数ポインタは他のポインタと互換性があるとは限らないんだけど






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<189KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef