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


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

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



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

700 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 16:44:31 ]
>>687
関数間が NOP (90h) で埋められてるなら
NOP が出てくるまで・・・と出来そうな気はするけど、
コードの途中で境界合わせに NOP が出てこない保証もないし、
ダメかなあ・・・。

701 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 16:58:25 ]
>>700
定義順に関数アドレスが並ぶ保証はどこにもないよ

702 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 17:12:31 ]
>>699
ありがとうございます。調べてみます。


703 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 17:51:57 ]
>>701
?

704 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 18:17:06 ]
>>700
関数間がNOPで埋められる保証もどこにも無いよ。

705 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 19:37:39 ]
>>704
「関数間が NOP (90h) で埋められてるなら」
という条件付きで話してる事に、そう言われても・・・

706 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 19:42:30 ]
この手の板にはよくあること

707 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 19:43:36 ]
関数のアドレスが、ジャンプテーブルだったりするのも
よくある話。

708 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 20:06:18 ]
C++だけではGUIって作れない?
API勉強しないとだめ?



709 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 20:09:33 ]
>>708
「C++だけ」ってのが「標準C++ライブラリだけ」ってことならyesだな

710 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 20:19:22 ]
>>709
ありがとう。さすがにCUIばっかりで飽きてきちゃったからAPI勉強してみる(`・ω・´)

711 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 20:34:28 ]
>>709
否定形の問いかけに対して安易にyesと答えてはいけないw

712 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 20:56:37 ]
>>705
VC2005だとそうなっては無かったから、
結構多くのコンパイラでその仮定は間違っているんじゃ無いの? と思っただけ。
どっちにしても>>700はあんまり意味無さそうだね。

713 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 21:24:20 ]
>>707
vc8のインラインアセンブラだと
 × call printf
 ○ call dword ptr [printf]
 ○ call test_func
 ○ call dword ptr [test_func]
(test_funcは同じオブジェクト内の自作関数)
じゃないとうまく動かなかった。
不思議なような、そうでもないような。うーん。

714 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 21:32:18 ]
call printfがだめなのは、ランタイムDLLを使っているからという可能性は無い?

715 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 21:40:08 ]
>>714
That's right !  そのとおりだった!

ってか、前にMTでテストしたはずだったんだけどな・・・orz

716 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:51:37 ]
関数最後のサブルーチンコールはジャンプで実装する最適化もあるぞ。

717 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 00:19:18 ]
>>712
昔の VC6 くらいそうなってなかったかなあ。

718 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 09:55:26 ]
2005もDebugとReleaseで違うしな



719 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 21:51:23 ]
質問です。

基本的にMFCのDoc-Viewを用いたプログラムです。自分で生成した特定の
ウィンドウのスナップショットを、画像に保存したいのですが、どのようなアプローチで
進めたらいいのか悩んでいます。

1. 非アクティブまたは非表示な場合でも、フレームを含めたウィンドウ全体を
画像として取得するような手段はあるのでしょうか?

2. 1.が不可能なら、非アクティブまたは非表示で、ウィンドウの内容(例えばCViewの
中身)のみを取得する手段はあるのでしょうか?

XP VC2005 SP1

720 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:07:13 ]
fgets(str,N-1,stdin);
printf("%d",(int)strlen(str));

↑な感じのコードを書いて実行させると、
【実行画面】
>hoge
5

となるのですが、これってどうなっているのでしょうか?

721 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:12:05 ]
hogeの後に改行文字がくっついてて、それも数えられてるから

722 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:14:58 ]
あぁ、改行文字を読み込んでたのか!
ヌル文字は入れないはずなのになんでかと思ったら…。
>>721サンクスです!

723 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:00:52 ]
>>718
2005だとRelease,Debugとも基本的にNOPは使ってないよ。

724 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:24:29 ]
char str[10]="piyo";

これでstrが指す場所を"yo"にしたいのですが、
どうすれば良いでしょうか?


725 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:25:23 ]
>>724
strcpy(str, "yo");

726 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:28:13 ]
>>725
char *str2 = &str[2];

727 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:31:52 ]
>>725
文字列をコピーしたいってより、yoの場所まで移動させたいのです。
array[i++]=strtol(str,&err,0);
これを繰り返し行う際にstrをstrから任意のバイト分進めた値にして
文字列を完全に走査、数値格納したいのです。

728 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:39:50 ]
そのstrは配列だからそもそも指すとかそういう表現はしない
&str[2]とかstr+2好きなように表記すればよか
これが気持ち悪いなら別途charへのポインタ用意して
char *p=str;
とした後に読み進めたいバイト分だけp+=2みたいにインクリメントすればいい



729 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:41:26 ]
char* p = &str[2];
でいいんじゃね

730 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:44:48 ]
str[i]2

731 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:46:04 ]
>>727
strtol の使い方が知りたかっただけなんだね

#include<stdio.h>
#include<stdlib.h>

int main(void){
long value[100];
char str[]="100 200 300 400 500 x 600 777";
char *ptr=str, *endptr;
int i, value_num=0;

for(value_num=0;value_num<100;value_num++){
value[value_num]=strtol(ptr, &endptr, 10);
if(ptr==endptr) break;
ptr=endptr;
}

for(i=0;i<value_num;i++){
printf("%ld\n", value[i]);
}

return 0;
}

732 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:47:28 ]
>>726,>>728-729
なるほど、ありがとうございます。
それを参考にちょっと今から思った通り出きるか作ってみます。

733 名前:732 mailto:sage [2007/07/11(水) 00:34:56 ]
で、出来た…。
>>731さんのものを参考に、一行にある複数数字(途中非数字あり)
を格納して表示するプログラムを作ってみました。
これってあと直すところとかどうでしょうか?

>12 32 aaa43jfie55 32
たとえば入力が上のようなら、
12,32,43,55,32が配列に格納されて表示される仕様です。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 256
int main(void){
long value[N];
char str[N];
char *ptr=str, *endptr;
int i, value_num=0,l;
fgets(str,N,stdin);
l=strlen(str)-1;
for(i=0;i<l;i++){
if(strtol(ptr, &endptr, 10)!=0)
value[value_num++]=strtol(ptr,&endptr,10);
ptr=++endptr;
}
for(i=0;i<value_num;i++){
printf("%ld\n", value[i]);
}

return 0;
}

734 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 00:37:08 ]
#define N 256

735 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 00:37:13 ]
あれ、>>732>>731さんへのアンカを入れ忘れてました…。
申し訳ない、>>731さんも激しくありがとうございます。

736 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:01:54 ]
どなたかC++に詳しい方、教えてください。今日、はまりました。
以下ClassAに、オーバロードしたfunc()という関数が2つがあるとします。
ClassAを継承したClassBをnewし、classb->func(NUM_2);をコールすると、期待通りに
ClassA::func(NUM)がコールされるのですが、(1)だけオーバライドしたClassCを
newし、classc->func(NUM_2);をコールするとClassC::func(int, NUM)がコールされて
しまいます。
期待した動作はClassA::func(NUM)がコールされる事でした。
これはC++の仕様なのでしょうか。コンパイラがどういう論理でenumを使用した関数の
オーバライド/オーバロードを解決しているのかご存知の方、ご教示お願いします。

enum NUM { NUM_1, NUM_2, NUM_3 };
class ClassA {
virtual int func(int a, NUM b = NUM_1); // ←(1)
virtual int func(NUM a = NUM_1); // ←(2)
};
class ClassB : public ClassA
{
// ClassAの(1),(2)はオーバライドしていないクラス
};
class ClassC : public ClassA
{
// ClassAの(1)だけをオーバライド
int func(int a, NUM b = NUM_1);
};

737 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:03:17 ]
www.fides.dti.ne.jp/~oka-t/cpplab-hide-overload.html

738 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:06:12 ]
呼び出し側のコードはどうなってんの



739 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:12:08 ]
NUMばっか出てきてとか見づれーんだよ。もっと考えて書けよドカスが
>classc->func(NUM_2);をコールするとClassC::func(int, NUM)
理由は>>737
ClassCでfunc(int,NUM)を宣言しちゃったから、ClassAのfunc(int,NUM)が見えなくなってる。
あとvirtualな関数にデフォルトパラメータつけるな

740 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:58:14 ]
>>737
>>738
>>739
見づらくてすいません。
C++にそんな仕様があるとは知りませんでした。
ありがとうございました。

参考までに
>あとvirtualな関数にデフォルトパラメータつけるな
は何故でしょうか?

741 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 02:10:29 ]
デフォルトパラメータは静的な型に依存する

class B{
virtual void foo(int a=300){std::cout << a;}
}
class D{
void foo(int a=100){std::cout << a;}
}

B* pb = new D();
pb->foo(); //300と表示される

D* pd = new D();
pd->(foo); //100と表示される

だった筈

742 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 02:11:50 ]
>>741
> pd->(foo);
モチツケ

743 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 02:24:20 ]
>>741
なるほど。納得しました。
ありがとうございます。


744 名前:デフォルトの名無しさん [2007/07/11(水) 10:08:49 ]
>>188
PHPアプリとCアプリとログ出力先を共通化という
無茶な事を要求されているときも
行単位の一発書き込みなら大丈夫かな?

2プロセス立ち上げてそれぞれ適当に書き込みをさせて
100万回くらいテストしたんだけど これで混ざんなかったから
多分大丈夫だよね?

745 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 10:52:14 ]
>>744
「行単位の一発書き込み」がシステムコールレベルでそうなっているなら大丈夫。
具体的には、(直接的または間接的に)O_APPENDでopen()されており、write()
一発で1行を書き込んでいるなら大丈夫。
それから少しでもズレるならダメ。

Win32の場合、O_APPENDに相当する機能がCreateFile()に存在しないので、
*必ず*排他が必須になるようだ。

746 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 14:55:19 ]
質問失礼します。
シャノンの符号化法による符号語生成プログラムと、
表計算ソフトを用いた符号語生成の違いについて説明して頂けないでしょうか?
よろしくお願いします。

747 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 16:23:30 ]
>>746
表計算ソフトを用いた符号語生成って、何のことか教えて。

748 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 21:59:26 ]
>>743
ちなみに741の問題を回避するためにもNVIパターンが使えるぞ。



749 名前:デフォルトの名無しさん [2007/07/12(木) 08:23:23 ]
すみません
string型でファイル名を持っているとき、それをオープンしようとすると
エラーが出ます。char型にするにはどうすれば良いですか?

750 名前:749 [2007/07/12(木) 08:26:48 ]
自己解決しました

751 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 08:26:59 ]
つc_str()


752 名前:デフォルトの名無しさん [2007/07/12(木) 08:27:49 ]
ありがとうございました

753 名前:デフォルトの名無しさん [2007/07/12(木) 08:51:04 ]
ファイルを読み込むとき、終端で必要以上のサイズを
読み込むと配列が最後まで埋まってしまいます
どうすれば実データのみ読めますか??

fp.read(str,N); とすると strのサイズはNになります

754 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 08:58:00 ]
何使って読み込んでるの? fp の型は?


755 名前:デフォルトの名無しさん [2007/07/12(木) 09:04:02 ]
fstream fp ("filename", ios::in | ios::binary );

なんですけど、fp.read(str,N); の戻り値は、istream 型です

どうすればサイズがわかりますか??


756 名前:755 [2007/07/12(木) 09:24:03 ]
自己解決しました

fp.gcount();で読み込みサイズが出ました






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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