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


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

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



1 名前:デフォルトの名無しさん [2010/03/05(金) 16:51:13 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.71【環境依存OK】
pc12.2ch.net/test/read.cgi/tech/1264774545/

【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
codepad.org/ (コンパイルもできるし出力結果も得られるのでお勧め)

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。


421 名前:デフォルトの名無しさん [2010/04/12(月) 15:47:42 ]
ある関数が定義されているかどうかを知る方法を教えて

422 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 15:53:36 ]
リンカでリンクしてエラーが出るかどうか

Windows環境で winver により 使える/使えない API を分岐して使いたい
→ (LoadLibrary) 〜 GetProcAddress の戻りで分岐

423 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 17:12:21 ]
>>422
そこまでいかないとわからないか・・・そりゃそうか

ある関数が定義されてなければ俺が定義する というコードを
書きたかったんだけど

424 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 17:16:35 ]
リンク時に 同一シンボル が存在した時、エラー以外で対処できる環境もあるよ
(.lib 中 と .obj中 に同じシンボル → .obj側優先でリンク: MSのリンカ)

425 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 17:23:23 ]
あー ゴメン 無ければ俺実装 有ればオリジナルを優先 ってのは
ちょっと難しいかも?

426 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 21:22:32 ]
その逆で、自分でも書くけど他のコードで上書き可能、ならweak属性という手もあるけどな

427 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 00:58:26 ]
iostreamのcin, coutをバイナリモードにする処理系非依存な方法はありますか?

428 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 06:51:05 ]
ios::binary

noskipws
じゃダメなん?

429 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 11:13:13 ]
>>428
ios::binaryはどうやって設定するんでしょうか?
noskipwsなどはsetf()で設定できるけど、ios::binaryは書式フラグではないですよね。



430 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 15:25:31 ]
>>426
weakか。使えそうかも。

431 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 22:05:51 ]

環境はwindowsXPSP3 VC++2008です
const_castをうまく扱えません、助けてください

まずMeCabという形態素解析エンジンのライブラリを使おうと思いました。
ttp://mecab.sourceforge.net/libmecab.html
のC++ サンプルと言うものを使おうと思ったのですが、エラーが出ます
ライブラリ自体は
ttp://jaist.dl.sourceforge.net/project/mecab/mecab-win32/0.98/mecab-0.98.exe
で解凍したMeCab\sdkの中にあります

とりあえず
#include <mecab.h> を
#include "mecab.h" に直しました
すると別のエラーがでまして

1>d:\mecab\main.cpp(30) : error C2440: '初期化中' : 'const MeCab::Node *' から 'MeCab::Node *' に変換できません。
1> 変換で修飾子が失われます。
1>d:\mecab\main.cpp(36) : error C2440: '=' : 'const MeCab::Node *' から 'MeCab::Node *' に変換できません。
とでまして、const_castと言うものを使えば解決出来そうな感じなのですが、使い方がよくわかりません
どうすればいいんでしょうか
30行目は以下のようになっています。よろしくお願いします
MeCab::Node* node = tagger->parseToNode(input);

432 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 23:07:53 ]
>>429
open時

433 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 23:18:46 ]
>>431
そのドキュメントを信じるならMeCab::parseToNode()はMeCab::Node*を返すのでそんなエラーは出ない

場当たり的1
MeCab::Node const * node = tagger->parseToNode(input);
場当たり的2
MeCab::Node* node = const_cast<MeCab::Node*>(tagger->parseToNode(input));

もしかして:
MeCab::Tagger *tagger = MeCab::createTagger (argc, argv);
の行にconstをつけてしまっている
または
サンプルがそもそも間違っている

434 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 01:37:17 ]
>>432
cin, coutは既にオープンされてると思うんですが
オープンし直す方法があるんですか?

435 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 01:43:22 ]
>>427 www.parashift.com/c++-faq-lite/input-output.html#faq-15.13

436 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 01:47:37 ]
C++にfreopen()に相当する関数あったっけ?

437 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 02:31:33 ]
>>435
ありがとうございます。処理系依存になっちゃうんですね。
Windowsだと_setmode()を使えばバイナリモードにできるみたいでした。

438 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 07:54:09 ]
>>433
やっぱりエラーでてしまいます><
もう作者に聞いてみます。ありがとうございました!
1>main.obj : error LNK2019: 未解決の外部シンボル "__declspec(dllimport) char const * __cdecl MeCab::getTaggerError(void)" (__imp_?getTaggerError@MeCab@@YAPBDXZ) が関数 _main で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル "__declspec(dllimport) class MeCab::Tagger * __cdecl MeCab::createTagger(int,char * *)" (__imp_?createTagger@MeCab@@YAPAVTagger@1@HPAPAD@Z) が関数 _main で参照されました。
1>D:\mecab\Debug\mecab.exe : fatal error LNK1120: 外部参照 2 が未解決です。

439 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 08:26:25 ]
コンパイルエラーならともかく
リンクエラーで聞かれても困っちゃうな



440 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 21:46:39 ]
>>436
freopen

441 名前:431 mailto:sage [2010/04/14(水) 22:24:36 ]
挫折しますた・・またいつか会う日が来るかもしれません・・
なければ、さようなら

442 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 22:33:26 ]
こうしてC/C++の奇怪仕様によって
一人の命が失われたのであった。

443 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 22:58:56 ]
>>431
付属のexample.cppだとそのようなエラーは出なかった

>>438
ライブラリを使うのは初めてか?力抜けよ

444 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 23:13:25 ]
ワロタ
まぁ色々な言語を使って勉強してみ
後年思い出したときに使うと、あっけなく使えるもんさ
今必要なものだったら、その、なんだ。スマン。

445 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 12:10:08 ]
頭を変更・追加
#include "mecab.h"
#pragma comment(lib, "libmecab.lib")
でいけたぞ。もう死んだかな

446 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:51:07 ]
IPhoneとかAndroidで使える無料のC++コンパイラってありますか?

447 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 22:22:33 ]
Win7使ってるんですが
VisualStudio2005って対応してますか?

学校でインストールできるんですが、2008より2005のほうが軽いよ!って言われて困ってます

448 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 22:42:31 ]
>>447
どっちでもいいけど
教えてくれる人の環境に合わせるのが楽

449 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 22:57:54 ]
>>447
2008作る時に2005に残ってた大量のバグ潰したらしいよ!と言い返してみよう



450 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 22:59:39 ]
www.microsoft.com/downloads/details.aspx?FamilyId=90E2942D-3AD1-4873-A2EE-4ACC0AACE5B6&displaylang=ja

でも2010に移行しようってときにあえて2005ってどうなの・・・

451 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:00:18 ]
2005はUACがうざい

452 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:33:11 ]
2008 ってひょっとして管理者権限なしでも大丈夫なの?
デバッグ中にD&Dができなくて困ってた

453 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:53:23 ]
それは必要よ

454 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:54:38 ]
ってか、開発マシンに対する管理者権限もらえてないの?

455 名前:447 mailto:sage [2010/04/15(木) 23:57:05 ]
どっちでも大丈夫なんですね
ありがとうございます


教えてくれる人?は特にいないです
みんなでゲーム作ろう!ってなって、学校で配ってるのが2008と2005でした
斡旋機なので、全員同じスペックのWin7のノートPCをもってます

こういう場合はどっちがおすすめですか?
新しいほうがいいのかな?
一応、どっちかに統一しないとコンパイルが通らなくなるといわれたので

456 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 00:06:50 ]
何の理由もなければ新しい方
tr1使えるしなー

457 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 00:11:43 ]
MSDN AA なんだろうけどそれはライセンス違反になるんじゃないの

458 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 00:21:19 ]
学生に優しいと定評のあるマイクロソフト

459 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 07:12:27 ]
2008はオプション変更しないとブレークポイントに止まらないことがある



460 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 08:03:18 ]
>>457
Expressかもよ。 配ってるってのはDVD媒体に焼いて配ってるのかもしれないし。

>>447
特にDirectXはバンバン古い開発環境を切り捨てるから、新しいのを入れといた方がいいと思うけど。

461 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 09:33:49 ]
じゃあ、2008にしますありがとうございました

くばってるというのは、インストールできる場所が大学の図書館にあってCDを借りてインストール
職員がプロダクトキーを打ち込んで
CDを返却して帰るみたいな感じです

462 名前:デフォルトの名無しさん [2010/04/16(金) 11:40:39 ]
そ、それはいいのか・・?
EEなら大丈夫だと思うが・・

463 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 12:52:27 ]
悪い運用には見えないけどな。
ただ、太っ腹だなぁと思う。

464 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 15:43:05 ]
ボリュームライセンスならいいんじゃね?

465 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 18:26:01 ]
>>461
それ大丈夫なのかww

466 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 20:09:48 ]
職員がプロダクトキーを打ち込んで
ってところが味噌だわな
胡瓜に附けて食べちゃう

467 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:40:51 ]
アカデミーのライセンスなら安いから、斡旋のPCにライセンスも込みなんじゃねーか?

468 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 23:44:17 ]
結局詳細がわからないからなんとも言えないけど、
論文をコピーするのと同じ感覚で、ソフトもコピー
してるんじゃないかと勘繰ってしまう…

469 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 23:55:47 ]
VSは1ユーザー複PCが認められているので
教材費として徴収済みなんじゃないのかな
Linux&gccやEEでも十分だとは思うけど
アカデミックなら安いし



470 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 00:08:24 ]
個人に対するライセンスを保有している状態なら
訳がわからない運用ということになるだろうけど・・・

471 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 00:28:00 ]
>>470
生徒と職員の人数分のボリュームライセンスでOKなんじゃね?
生徒数と職員数さえ把握しておけば、卒業の時に消して貰う運用にして、
学校の全てのPCにインストールすることも、
生徒であることを確認するだけで、持ってきたPCにインストールもOKなのでは?
まぁ、細かいライセンス条項を覚えてないから間違えてるかも知れんが…

472 名前:447 mailto:sage [2010/04/17(土) 07:58:37 ]
なんかよくわからないこと言ってすいません……
結局2005いれてSP1あてたら正常に動きました

ちなみに、Officeも2003と2008?最新のやつ無料でいれられます


2005も2008もオフィスも全員分とってるのかな?

なにはともあれ本当にありがとうございました

473 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 09:42:15 ]
いいなぁ
うちの学校は大学のPCじゃないとvs使わせてもらえないぜ

474 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 10:35:43 ]
自分のPCで使えよ


475 名前:デフォルトの名無しさん [2010/04/18(日) 11:41:36 ]
スレ違いならごめんなさい

C言語で日本語が表示されるプログラムを作ったのですが、コマンドプロンプトでそのプログラムを実行しても日本語が表示されません(記号と変な文字のオンパレードになります)。どうやったら日本語で表示されるのでしょうか?

ちなみに参考書の通りプログラムを書いているので、間違いというのは無いはずです

476 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 11:49:50 ]
>>475
ソースコードを保存するときの文字コードをシフトJISにしてみるとか

477 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 12:02:51 ]
.NETを使った記述もここでOKでしょうか?(ダメなら誘導してください)
2005 C++
WinXP SP3

Form1、Form2と作成し、Form2内部で実処理部分を関数で呼び出しています。
Form1からはForm2を呼び出せるのですが、実処理部分の関数からForm2を呼び出すことができません。

Form2^ ff = gcnew Form2();

としていますがこれがコンパイルエラーとなります。
(error C2065: 'Form2' : 定義されていない識別子です。)
Form1からは同じ宣言で呼び出せるのですが・・・

助言をお願いします。


478 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 12:11:19 ]
>>477
#include "Form2.h"


479 名前:477 mailto:sage [2010/04/18(日) 12:24:15 ]
>>478
includeはしています。
(確かにincludeの順番でエラーを吐いたりもするので関連しているようにも思います)




480 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 16:10:38 ]
>>477
よう分からんけどForm2が定義されてる名前空間と
実装処理部の名前空間が違うんじゃない?

481 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 16:39:17 ]
インクルードがループしてるんじゃないか

482 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 21:42:57 ]
>>477
Form2を定義している名前空間をそのnewしてるトコで参照してない希ガス
或いは参照してるつもり->スペルミスとか

483 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 22:16:43 ]
Form1.hでForm2.hをインクルードして
Form2.hでForm1.hをインクルードしているのでは?

484 名前:477 mailto:sage [2010/04/18(日) 22:33:07 ]
>>480-483
ありがとうございます。
>>481さんの助言をもとに色々と調べた結果、Form2と実処理の関数の間で循環参照が起きてしまっています。
>>483さんのおっしゃられているとおりです)

実処理の関数はForm2の実行ボタンを押したときに実行するようになっており、
その実処理の進捗をForm2内のLabelやProgressBarに表示したいのですが、
根本的に考え方が間違ってますかね?

Form2内でLabelやProgressBarにアクセスする関数を宣言して、実処理関数の中で使いたいのですが・・・


485 名前:デフォルトの名無しさん mailto:sage [2010/04/20(火) 21:46:40 ]
windows7のvisualstudio2008でgdi+をインクルードするとエラーの嵐なんですが、なんとかなりませんか?

486 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 09:59:27 ]
>>485
VisualStudioスレへどうぞ。

>>484
C++/CLIスレへどうぞ。

487 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 19:52:22 ]
誘導するだけならこのスレ不要だな

488 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 19:56:06 ]
そんなこと言ったらこの社会の大部分は不要になるぞ
適切にたらいまわしてくれる人も必要なんだよ

489 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 19:56:43 ]
>>488
たらいまわしじゃねーよ



490 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 20:06:04 ]
誘導だよな。
何でC/C++スレで、関係ない言語の話やソフトウェアについて話をしたがってるんだっていう。
肉屋で野菜や包丁買おうとしてるのが普通に思えるんだろか。

491 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 20:10:21 ]
>>490
初心者歓迎、環境依存OKを謳っているスレでそれは言いすぎ
単に、より適切な回答がつきやすいスレに誘導したほうがお互い効率的だという
だけの話

492 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 22:40:51 ]
template<class T> struct identity { typedef T type; };

このメタ関数は何のために存在するんですか?

493 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:26:15 ]
>>492
template<class T>cast(typename identity<T>::type v){ return v; }
とか
typedef boost::mpl::eval_if<is_const<T>, identity<const int>, identity<int> > iint;
とか

494 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:31:17 ]
横槍レスだが

>>493
相変わらずC++ TMPは難しすぎだろ


495 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:35:48 ]
・eval_ifに渡すラッパー

・変数宣言
○int *p1, *p2;
×int* p1, p2;
○boost::mpl::identity<int*>::type p1, p2;

・メタ関数をつくるヘルパ(例:osteram等から同じ文字型とTraitsのbasic_stringをつくる、strメタ関数
template<typename Stream> struct str : public boost::mpl::identity<
std::basic_string<typename Stream::char_type, typename Stream::traits_type>
> { };


496 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:39:04 ]
すまんtypo
×osteram
○ostream


497 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:48:41 ]
なるほどぉthxですた、でも
template<class T>cast(typename identity<T>::type v){ return v; }
これがちょっとわからなかった


498 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:52:02 ]
>>493
自分で書いておいてなかなかひどい
template<class T> T cast(typename identity<T>::type v){ return v; }と
typedef boost::mpl::eval_if<is_const<T>, identity<const int>, identity<int> >::type iint;
だな

前者はTの型の推論ができなくなる(=明示的に型を指定してほしい関数に使える)
template<class T>void f(T v);
char c;
f(cast<int>(c));
的な

499 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:52:26 ]
>>495
なーーーるほど!!
いやー、気がくるっとルなぁ



500 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 19:32:40 ]
virtualメソッドに実行時コストがあるのは関数ポインタ経由してるから、とかるんですが
virtual継承にも実行時コストがあるのはなぜ何ですか?
コンパイル時に解決出来そうな気がするんですが

501 名前:477 mailto:sage [2010/04/25(日) 19:56:38 ]
>>486
誘導ありがとうございます。
行って参ります。

502 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 23:07:04 ]
>>500
解決できそう?

#include <iostream>
#include <vector>
class Animal {
  public: virtual void bark() { };
};
class Dog : public virtual Animal {
  public: virtual void bark() { std::cout << "bow wow" << std::endl; }
};
class Cat : public virtual Dog {
  public: virtual void bark() { std::cout << "meaow" << std::endl; }
};
int main() {
  std::vector<Animal*> animal;
  animal.push_back(new Dog());
  animal.push_back(new Cat());
  animal[0]->bark(); // Dog
  animal[1]->bark(); // Cat
}


503 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 02:46:24 ]
なにその猫こわい

504 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 03:57:09 ]
凡ミスがこんなに怖いとはw

505 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 05:32:17 ]
ワロタ

506 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 05:56:15 ]
違うよ全然違うよ凡ミスじゃないよ犬だってネコにもタチにもなりうるんだよ

じゃなくて、virtual継承が仮想継承のことを言っていると見せかけて
実は仮想関数のオーバーライドを指してるんじゃないかと思ったから
両方入れてみたんだよ

507 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 06:28:24 ]
我が輩は猫であるが犬でもある。名前はまだ無い。

508 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 07:50:34 ]
>>502-503 の流れでワロタwwww

>>506
それはわかったけど、クラス名のチョイスがじわじわ来た


509 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 09:32:24 ]
今は亡き加藤和彦が木村カエラをボーカルに呼んで再結成したサディスティックミカバンドの歌で、
「犬だってにゃぁ」とか「猫だってわん」とかって歌詞があるのを思い出した。



510 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 09:41:18 ]
今後クラスの継承の話する時このネタ使わせてもらうわw


511 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 14:55:14 ]
class Animal {
public: virtual void bark() = 0;
};


512 名前:デフォルトの名無しさん [2010/04/26(月) 21:04:13 ]
Waveファイルを読み込むプログラムを作ろうとしてますがうまくいきません。
大きいファイルを読もうとしてるので、バッファ領域を確保して、その領域にちまちま
ファイルを読み込んでいこうという魂胆ですが、出力してみると全て0のままです。
小さいファイルなら読み込めるようですが、大きい(200MB以上)では読み込んでくれません。
アドバイスをください。

以下ソース
ifs = fopen("C:\\TEST.wav","rb");
/*** ヘッダー読む ***/
int blockSize = waveHeader.getBlockAlign(); //ブロックサイズを得る
//12000バイトのバッファを確保したつもり
unsigned char *buffer = (unsigned char*)calloc(4000, blockSize);
do {
//12000バイト分のデータを読み込んだつもり
readSize = fread( buffer , blockSize , 4000 , ifs );
for( int i = 0; i < readSize; ++i)
{
//読み込んだデータを出力してみても 0 のままで出力される
cout << ((short*)buffer)[ i * 2] << ":" << ((short*)buffer)[ i * 2 + 1] << endl;
}
} while (readSize == 4000);

513 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 21:23:35 ]
素朴な疑問だが、waveHeader構造体のメンバはちゃんとした値が入っているのかね。
取り敢えず、blockSizeが幾つになっているのか確認するところからだな。
つーか、通常fread()は失敗しないからdo-whileは要らんだろ。

514 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 21:24:27 ]
>>513
ファイル終端まで読み続けたいんじゃないかと

515 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 21:32:36 ]
unsigned int blockSize = waveHeader.getBlockAlign();


516 名前:デフォルトの名無しさん [2010/04/26(月) 21:45:13 ]
みなさんありがとうございます。

>>513
blockSizeは4が入ってます。
一応RIFF , fmt , dataなどの文字を確認してヘッダー読み込みOKとしてます。

>>515
変えても何も起こりませんでしたが、確かにマイナスが入るというのは考えにくいですね
こうしておきました。

517 名前:512 mailto:sage [2010/04/26(月) 22:00:48 ]
typedef struct _RIFF{
  char riff[4];
  int fileSize;
  char formatType[4];
}RIFF;

typedef struct _FORMATCHUNK{
  char id[4];
  int idFormatSize;
  short int formatId;
  short int channel;
  int sampleRate;
  int bytePerSec;
  short blockAlign;
  short bitsWidth;
}FORMATCHUNK;

typedef struct _DATACHUNK
{
  char id[4];
  int size;
}DATACHUNK;

ちなみにwaveHeaderは各構造体を持っているだけで
主要な部分のみgetメソッドを作りました。読み込まれたか確認するのは>>516の通りで
ヘッダーの最後にあるDATACHUNK内のsizeを見ても正しいデータが入ってますので
構造体の値はOKかと

518 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 22:13:49 ]
>>512
全て0ってのはどうやって確認してるのかな
出力の一部分だけ覗いてるならその部分がたまたま無音だったとか

519 名前:512 mailto:sage [2010/04/26(月) 22:25:12 ]
>>518
そこはバイナリエディタで開いて確認しました。
最初の方は確かに0でしたが、一回目のfreadで全部読み込める程度しか
なかったので、全部0になっていると判断しました。

あと、いい忘れていましたが、小さいファイルなら do whileを抜けてプログラムが終了しますが
大きいファイルは do whileを抜けてきません。



520 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 22:36:11 ]
>>512
ソースうp!

521 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 22:39:06 ]
4*4000=16000






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

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

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