07/07/05 05:13:07
>>472
こっちで聞いた方がいいと思う
Visual Studio 2005スレ Part21
スレリンク(tech板)
474:デフォルトの名無しさん
07/07/05 09:03:52
実行環境はWindows環境、開発環境はVS6.0です。
メールを送りたいのですが一般的な既存ライブラリは存在しているのでしょうか?
イメージしているのはWinsockに依存したライブラリですが
普通はそのままSMTPを喋るものなのでしょうか?
受信は必要なく、OB25Pも問題ありません。
475:デフォルトの名無しさん
07/07/05 09:38:14
Windowsで一般的といえばMAPIだろうな
俺は使いたくないけどw
476:デフォルトの名無しさん
07/07/05 09:42:20
basp21.dll
477:デフォルトの名無しさん
07/07/05 10:46:02
>>476
そういえばそんなのもあったね。
478:デフォルトの名無しさん
07/07/05 11:05:27
URLリンク(www.hi-ho.ne.jp)
2007年6月29日更新
タイムリーすぎてワロス
まさか自演じゃないだろうな
479:デフォルトの名無しさん
07/07/05 11:31:25
Windowsで簡単に見た目もいけてるGUIを作るにはどんな方法があるでしょうか?
ちなみに過去にチャレンジしたこと
・C++/CLR
コントロールは豊富だが、OfficeとかVSにあるようなフローティングメニューが見つからないので中断
日本語の資料が少なくて困る
既存のリソース(DLLなど)と組み合わせるときに
DLLのほうの仕様を変えないとうまく動かないor非常にめんどくさいの2択になる
あと変な拡張構文がキモい
・MFC
デフォルトのコントロール数が貧弱だが、資料も多いし、
Win32APIをラッピングしてある程度のものが多くわかりやすい。
VS2005で作成するとManifestでうんぬんとうざいのでスタティックリンクできないプロジェクトだとだるい。
・C++Builder
GUIのデザインをするには最強だと思うが、本体が生きてるのか死んでるのかよくわからんのと
重い、謎のバグがいつまでも取れない、というのがネック。
未だに6を使ってる人が多い。
VCと一緒に入れるとデバッガが正常に動かない可能性がある?
・WTL
何がいいのかさっぱり
480:デフォルトの名無しさん
07/07/05 11:40:11
CEGUI
481:デフォルトの名無しさん
07/07/05 11:56:50
>>479
SWINGとかAWT継承すれば?
C++じゃなくなるけど
482:デフォルトの名無しさん
07/07/05 12:21:14
SwingとかAWTをJNI通してC++から使うっていう意味?
483:デフォルトの名無しさん
07/07/05 12:22:06
SQING や AWT がイケてるとは思えないけどw
484:デフォルトの名無しさん
07/07/05 12:36:44
ロジック部分を C++ で書いて
ユーザインターフェイスは C# で書く。
C# からアンマネージドなDLL呼び出せるし。
だめ?
485:デフォルトの名無しさん
07/07/05 12:43:30
FrameworkもJREも無しですませたい
486:デフォルトの名無しさん
07/07/05 12:52:35
すみません
stringのfindは、またはの検索できませんか
たとえば"あい"または"大塚"または"愛"
とかです
487:デフォルトの名無しさん
07/07/05 12:53:34
str.find("あい"|"大塚"|"愛")
でいいんでしょうか
488:デフォルトの名無しさん
07/07/05 12:56:49
なんで試さないの?
489:デフォルトの名無しさん
07/07/05 12:58:48
>>486-487
str.find("あい") != string::npos ||
str.find("大塚") != string::npos ||
str.find("愛") != string::npos
正規表現ライブラリを使ったほうがいいかもね。
490:デフォルトの名無しさん
07/07/05 13:01:18
>>499
ヒットする、またはヒットする、ってやるんですね
サンクス わかりました
491:デフォルトの名無しさん
07/07/05 13:02:37
でも、番号がわからないような気が・・正規表現ライブラリを調べてみます!
492:デフォルトの名無しさん
07/07/05 13:07:19
場所が欲しかったら代入してやればいい
if ((pos = str.find("あい")) != string::npos ||
(pos = str.find("大塚")) != string::npos ||
(pos = str.find("愛")) != string::npos) {
// みつかった
} else {
// みつからへん
}
493:デフォルトの名無しさん
07/07/05 14:22:14
ライセンスキーを入力->立ち上がる
これをやりたんです。
・キーの発行は手作業で。
・アプリ側ですること、ライセンスキーを認証するdllを作成。
こんなこと想像してます。解説しているページや
簡単に実現できるツールなどありませんか。
494:472
07/07/05 15:53:44
>>473
誘導感謝。そっちへ行ってみます。
495:デフォルトの名無しさん
07/07/05 23:58:22
>> 同じ文字列リテラル(ダブルクォーテーションで括った文字列)は、
>> コンパイラに特別指定しない限り同じ領域を指すポインタである。
>
>そんなことは決まってない。
そうでない処理系を挙げてくれ。
>
>> そして、この構文は静的変数(グローバル変数か、スタティック変数)にだけ許される。
>
>自動変数でも配列要素数の省略は使える。
どんな例か試しに書いてくれ。
496:デフォルトの名無しさん
07/07/06 00:04:06
VCとか。
C89(ANSI-C)以前の人は、自動変数で
int hoge[]={1,2,3};式の初期化が出来ないとか言い張ることあるよね。
497:デフォルトの名無しさん
07/07/06 00:08:04
>>495
Visual C++では、コンパイラオプション/GFを指定しないと
同一文字列リテラルが同じ領域を共有するようにならない。
(なお/O1や/O2などの最適化オプションを指定すると暗黙の内に/GFも指定されたことになる)
ローカル変数での配列でもchar s[] = "hoge";や
char s[] = {'h', 'o', 'g', 'e', '\0'};のように書くことは可能。
このように静的変数や大域変数と同じ構文。
少なくともANSI/ISO Cではできることになっているし、
PC用のコンパイラなら今時できないものを見つけるほうが難しい。
498:デフォルトの名無しさん
07/07/06 00:12:14
>>495
===== 同じ文字列リテラルが違う領域を指す例 =====
gcc -c b.c
gcc a.c b.o
/*----- a.c -----*/
#include<stdio.h>
char *p_hello(void);
int main(void){
printf("%s %s\n", "hello", p_hello());
printf("%p %p\n", "hello", p_hello());
return 0;
}
/*----- b.c -----*/
char *p_hello(void){
return "hello";
}
----- 実行結果 -----
hello hello
00403000 00403020
===== 自動変数で配列要素数の省略 =====
#include<stdio.h>
int main(void){
int i, data[]={0,1,2,3,4,5,6,7,8,9};
for(i=0;i<sizeof(data)/sizeof(data[0]);i++)
printf("%d\n", data[i]);
return 0;
}
499:デフォルトの名無しさん
07/07/06 00:22:06
>>495
わざわざ無知を晒しに出てこなくてもよかったのにね。
500:デフォルトの名無しさん
07/07/06 00:28:25
まあ聞くは一時の恥、聞かぬは一生の恥と言うし、
495はいい勉強になったということでいいじゃないか。
501:デフォルトの名無しさん
07/07/06 00:38:17
>>493
至極簡単だと思うけど…
502:474
07/07/06 01:01:18
皆様回答ありがとうございます。
BASP21はタイムリーですね。自演ではないです。
調べてみたところSMTP-AUTHに対応してなさそうな感じでしたので
MAPIをもう少し調べてみようと思います。
ありがとうございました。
503:493
07/07/06 02:01:09
>>501
1.大量のライセンスキーのデータベースが入っていて、マッチング。
2.それとも、秘密の値を一つだけ持っていて、
数学的になにか計算して、(ハッシュなど)マッチング。
一番目ってキーの数が多かったら、大変ですよね。ぬー。
ということは、数学のなにかを使って、やるんでしょうか?
たとえば、ウィンドウズだと、どんな感じでしょうか。
504:デフォルトの名無しさん
07/07/06 02:25:49
ライセンスキーをソートした状態で持っておけば、2分検索が使えるよ。
505:デフォルトの名無しさん
07/07/06 02:45:47
だいたいはアルゴリズムで、
ブラックリストデータベースも利用、かなー。
MSのは、公開鍵認証とハッシュがどーの、という話があったけどねー
506:デフォルトの名無しさん
07/07/06 06:36:31
オンライン認証じゃないのか
507:493
07/07/06 10:40:35
>>504-505
たくさんの大量のライセンスキーを
用意して、ただマッチングがわかりやすいです。
オンライン認証もいいですね。
>MSのは、公開鍵認証とハッシュがどーの、という話があったけどねー
ハッシュ、公開鍵、秘密鍵、独自の計算方法、を使うんですか。
難しそうなので、うまいアルゴリズムは、徐々に考えていこうと思います。
興味があったので、勉強のために質問させていただきました。
ありがとうございました。
508:デフォルトの名無しさん
07/07/06 11:17:24
MSの場合はデータベースを使ってるに決まってるだろ。
509:495
07/07/06 21:41:30
検証してANSI-Cでは動的配列等の初期化ができると分かって来て見たら非難誹謗の嵐だ。
わざわざお礼を言おうと思ったが、そんな非礼な人間に感謝の気持ちなどなくなった。
そうだよ。俺はANSI-C以前からC使いだった。
C++を黎明期から覚えて使い始めてからは、string系クラスが活躍してくれて
外的・静的配列以外に初期化子を使う必要もなかったからな。
君らが古いコードをメンテする憂き目に遭うことを祈ってるよ。
510:デフォルトの名無しさん
07/07/06 21:46:42
どんな理由があろうが捨て台詞は格好悪いから辞めた方がいいって
511:495
07/07/06 21:50:05
ああ、ちなみに俺は『夜中までデバッグしたくなかったら』という前提で
文字列リテラルは同じポインタを参照するって意味で書いたんだぜ。
その辺は文脈嫁。
それから、C/C++の教本を読んでる暇があったら職を探せよ(w
512:495
07/07/06 21:53:19
漢字もろくに書けないゆとりに説教されるとはな。
辞める→止める、やめる
適当にアラスカ。
513:デフォルトの名無しさん
07/07/06 21:56:33
なんだこのオッサン
年甲斐もなく2chで火病かよ
一生やってろ
514:デフォルトの名無しさん
07/07/06 21:58:22
俺をあげつらったやつら、特に学生よ、昔のコードには
int a[100] = { 0 };
なんて構文はなかったんだぜ。
就職先のコンパイラが古かったら、解けないバグに悩まされろよ。
515:495
07/07/06 21:59:34
>>513
そのつもりだぜ?
516:デフォルトの名無しさん
07/07/06 22:00:17
日々のストレスで頭がおかしくなったんだよ。
そっとしといてやれ。
517:デフォルトの名無しさん
07/07/06 22:01:08
>>514
古いコンパイラでその構文が通らなければエラーになるだけなので
解けないバグも糞も無いんだが……
518:デフォルトの名無しさん
07/07/06 22:01:08
そんなに悔しかったのか
519:495
07/07/06 22:03:08
そっとしてくれないのはまさに君じゃあないか >>516
火病だろうがなんだろうが、アラシがいると皆楽しそうだなあ。ふふっ
期待してるんじゃないのか?
520:デフォルトの名無しさん
07/07/06 22:03:32
こりゃC99の話とかしたらおもしろそうだな
521:495
07/07/06 22:07:05
>>518
そうだな。例えば君が車の免許を取ったとする。
10年後に、君の知らない新しい規則で捕まったとしよう。
それは悔しくないか?
100歩譲って仕方ないとしても、
見ず知らずの人間から「そんなことも知らんバカがいる」
と言われて悔しくない奴がいるかい?
522:デフォルトの名無しさん
07/07/06 22:08:15
技術者なら仕様の更新くらい把握しとけよ
523:デフォルトの名無しさん
07/07/06 22:10:18
この業界の人間ならまず己を恥じるけどな
アンテナ張らなくなったら終わりだぞ
524:デフォルトの名無しさん
07/07/06 22:11:59
昔から半導体のプロセス技術で仕事をしていて、
年々プロセスが細くなってきて、昔は気にもしなかったような
トンネル効果やらリーク電流やらに悩まされるような感じか
525:デフォルトの名無しさん
07/07/06 22:12:53
>>521
つーか技術者なら、まず自分の無知を恥じろよ。
で、どういうカタチであれ知識を教えてもらったことを有難いと思えよ。
ま、アンタの場合、恥じるべきは自分の無知よりむしろ
年甲斐も無いDQNさだろうな。
もっぺん自分のレス読みかえせよ。
>>495は人にものを尋ねる態度か?
簡単に自分に確かめられることなのに、自分で確かめようともせずに
まるでケンカ越しで偉そうに聞いてたよな。
一体何様のつもりなんだか。
526:デフォルトの名無しさん
07/07/06 22:16:09
>>521
悔しいのはわかるが、それをばねに勉強するなど
その気持ちをほかの方向へ向ける手もあるだろうに。
527:495
07/07/06 22:17:10
>>520
complex型とか色々増えたんだろ。
確か、enumも面倒くさい仕様になったんだよな。
全く知らないわけじゃないが、不要な機能も多そうだ。
C言語仕様で遊んでる奴らは、もっと基本に返って欲しいぜ。
528:デフォルトの名無しさん
07/07/06 22:19:12
自分が最近の仕様に疎いという自己認識があるんなら
最初から>>462みたいに偉そうに書かなきゃいいのに
初心者相手と思ってやったんならなおタチ悪いぞ
529:デフォルトの名無しさん
07/07/06 22:19:51
enum で何か大きく変わったっけ?
最後にコンマつけても良くなった程度じゃない?
530:495
07/07/06 22:25:49
ほら、説教オタが集まってきた。
これだから嵐はやめられん。
>>523
お前は常にアンテナを張っているといえるのか?
>>524
それは『道具を作る』側の悩みだろ。現場だから悩みは直ぐ分かるぜ。
俺は言語を作ってるわけじゃない『道具を使ってる』側だから、勝手に変えられるのもこまるんだぜ。
>>525
そうさ、お礼をするつもりだったのさ。
その後は前に書いたとおりだ。二度も言わせるな。
人にモノを尋ねる態度じゃないと思ったら
答えなきゃいいじゃないか。それか無視すればいいんじゃね?
君の知識で答えられるとは思えないがな。実は今日初めて知った仕様じゃないのかい(w
>>526
そのつもり。
531:デフォルトの名無しさん
07/07/06 22:26:54
無視すればいいんじゃね?
どうみても過剰反応の荒しなんだが。
532:495
07/07/06 22:28:11
>>529
ほーら。こう言う人もいる。
分かる奴はenum談義でもしてやれよ。ほら。さあさあ。
533:デフォルトの名無しさん
07/07/06 22:30:16
いまどきノーヘルで捕まって悔しがる馬鹿っているのか?
そのレベルだろ
534:495
07/07/06 22:31:35
>>531
過剰反応じゃなきゃ嵐とは言えネー。
そして君は無視してなーい(藁)
535:デフォルトの名無しさん
07/07/06 22:32:37
>>534
漏れは楽しんでるからどんどん過剰反応してくれ
536:495
07/07/06 22:34:16
>>533
これだけ例えが分からん奴も珍しい。
心から軽蔑してやるぜ。
537:デフォルトの名無しさん
07/07/06 22:35:55
何を今更、ってたとえ話だろ。
538:デフォルトの名無しさん
07/07/06 22:38:21
文字通りの老害だね。
釣りじゃなければ
539:デフォルトの名無しさん
07/07/06 22:40:12
>>537
原付に乗っていきがっている中学生と似たようなもんだ、ということかと思った。
540:デフォルトの名無しさん
07/07/06 22:44:37
免許持ってるおっさんだと仮定して話してしまった
よく読んだら免許持ってるともおっさんだとも言ってないな
今は反省してる。
541:デフォルトの名無しさん
07/07/06 22:45:14
>521
なるほど。プログラマも更新必須の免許制に白って話だな。
んで、更新場で5000円はらって、「今度のC++09では~こういう変更が~」
みたいな話をありがたくちょうだいしろ、と。
542:デフォルトの名無しさん
07/07/06 22:50:41
>>521
法律は法律だろ…。
知らなかったなんて言い訳が通用するはずもない。
悔しいとか関係ないし。
自分で例えにもなってない例えを出しておいて、
よく他人に「例えが分からん」とか言えたものだな。
543:デフォルトの名無しさん
07/07/06 22:53:16
つーかC99ならまだしもC89なんて何年前の話だ
544:デフォルトの名無しさん
07/07/06 22:58:16
こいつの下についてる奴は哀れだな
普段から嬉々として間違ったことばかり言ってるが
「××さんそこはこうですよ」とか突っ込むと
逆切れして仕事にならんから適当な按配に放置されてると見た
545:523
07/07/06 23:00:35
>>530
当然だろ。おまえは違うみたいだけど
546:デフォルトの名無しさん
07/07/06 23:07:24
ってか、未来のコンパイラで使える技術と、
今の多くのコンパイラで使える技術ってちょっと違わないか?
>>495の内容は、コンパイルして確認できる程度のものだろ。
547:デフォルトの名無しさん
07/07/06 23:23:29
>検証してANSI-Cでは動的配列等の初期化ができると分かって来て見たら非難誹謗の嵐だ。
規格に当たれば済むことを、いい加減な検証で分かった気になるとは。
>わざわざお礼を言おうと思ったが、そんな非礼な人間に感謝の気持ちなどなくなった。
例を言うのに「わざわざ」なんて副詞をつけるくらいなら最初から言わない方がましだ。
>そうだよ。俺はANSI-C以前からC使いだった。
別に珍しくもないが、普通は今時のコンパイラに触れているうちに理解するもんだ。
>C++を黎明期から覚えて使い始めてからは、string系クラスが活躍してくれて
string系? std::stringに類似品があったっけ? std::basic_stringのことか?
>外的・静的配列以外に初期化子を使う必要もなかったからな。
無知蒙昧極まれり。
>君らが古いコードをメンテする憂き目に遭うことを祈ってるよ。
憂き目? まさか。温故知新と言う言葉はご存じないかな?
548:495
07/07/06 23:33:34
>>538 文字通りの老害だね。
そういう君の方が年上で無知だったりして。
2chで無意味なことを言う奴だ。
>>541
何言ってんの?免許制?そりゃあいい。
仕事だけじゃなく、きちんと新しい仕様を勉強する公な時間がとれるぜ。
君らも仕事するようになったら、アンテナ張るのが限界になることが分かるぜ、学生、失業者。
>>542
お前にゃ『例え』という概念も理解し難いらしい。
この例えが不適切だったと思う奴はちょっとレスしてみろ。
>>543
新しい仕様は受け入れるよ。そろそろ新しいC言語の教本を読む頃だ。
だが、K&R C言語の第2版でさえ、やはり自動変数の初期化子は
目の上のたんこぶ扱いだったようだ。
ゆとり世代がループ内で自動(配列)変数の初期化子なんか使われたら困るぜ。
>>544
安心しろ。会社ははけ口にならんからここに毒を吐いてるんだ。
549:デフォルトの名無しさん
07/07/06 23:36:40
アンテナ張るのも辛い職場ってどんだけブラックなんですか
550:デフォルトの名無しさん
07/07/06 23:40:36
技術者として新技術の吸収が無理だと分かったら、そいつはもうそこまでだぜ
このおっさんは汎用機と心中するしかないCOBOLerと一緒だな
周囲はゆとりと学生だけなんだ、自分は悪くないんだ、仕事やってりゃ皆こうなんだ、
と思い込もうとしてるんだね
実に哀れだね
551:デフォルトの名無しさん
07/07/06 23:43:48
>>548
(´・ω・`)⊃旦 < 毎日お疲れ様です、お茶ドウゾ。
552:デフォルトの名無しさん
07/07/06 23:49:41
自分で試さずに「試しに書いてくれ」ってまるでゆとり世代のようだな
553:495
07/07/06 23:51:42
>>545
君は自分の無知を自覚しようとしない奴だ。
ソクラテスはそういう事を何と言ったか知ってるか?
>>546
今日コンパイルしたのさ。
>>547
仕事中に新しい機能を覚える時間とそれを検証する時間をくれるなら進んでやるぜ。
社長は君かい(笑)
>string系? std::stringに類似品があったっけ? std::basic_stringのことか?
世の中にはSTLしかないと思っている奴を発見した。
しかも、wstringすら知らない奴もいたもんだ。
それから温故知新の使い方が逆だ。
君の使い方は『古いことを知り、かつ新しい事を知るべきだ』という意味にしかとれないが、
本当の意味は
『新しいことを知るには、古いことを知っておく事も重要だ』という意味。
やれやれ。ゆとり君=>>547。
554:デフォルトの名無しさん
07/07/06 23:55:42
>>553が憂き目の意味を理解してるかどうかが気になる
555:デフォルトの名無しさん
07/07/06 23:57:12
どんどん香ばしくなっていくな
556:495
07/07/07 00:03:14
>>550
そういうなよ、ゆとり。
それより、採用試験に向けて、人と目を合わせて話す練習をした方がいいよ。
>>551
サンキュー
>>552
そのときは思いもよらなかったからさ。
今日は仕事が一区切りつけたから検証できたんだ。
>>554
つらい体験
>>555
そう言うなよゾロ目
全員が無視されたら嵐は自然といなくなるんだぜ?
557:デフォルトの名無しさん
07/07/07 00:05:03
すごく・・・不毛です・・・
558:デフォルトの名無しさん
07/07/07 00:09:45
>>556
憂き目って、単につらいだけじゃなくて悲しいといったニュアンスも入るんだけど理解してる?
それでいて使い方が逆とか言ってる?
559:デフォルトの名無しさん
07/07/07 00:14:54
憂うっていうのは残念
560:デフォルトの名無しさん
07/07/07 00:20:56
まだやってんのか?
勉強の時間が取れないって割には暇なんだな。
561:デフォルトの名無しさん
07/07/07 00:20:58
いつから三つの数字をぞろ目と言うようになったのだろう……
562:デフォルトの名無しさん
07/07/07 00:21:58
>>553
> 仕事中に新しい機能を覚える時間とそれを検証する時間をくれるなら進んでやるぜ
こういう人多いんだよねぇ
・プライベートで自己啓発しようという考えが無い
・新しいことにチャレンジして新しい技術を仕事と共に身につけようという考えも無い
・自分に時間的余裕が無いのは上が悪いせいだ
ま、どうぞ勝手に腐ってくださいとしか
563:デフォルトの名無しさん
07/07/07 00:23:33
土曜日だからってはしゃぎすぎだろ。
そろそろ寝ろよおっさん。
564:デフォルトの名無しさん
07/07/07 00:24:07
>>561
それはふつうに言うんでないか?
ちんちろりんとかサイコロ3つ使うけど
565:495
07/07/07 00:28:19
>君らが古いコードをメンテする憂き目に遭うことを祈ってるよ。
>>558
よし答えてやろう。
憂き目がつらい体験というのはおおよそ間違ってないのではないかな。
それとも、『つらく悲しい経験』(goo辞書から抜粋)とでも答えてほしかったのかな?
そして、学生や就職浪人なんぞの世代が古いコードをメンテしたとき、
コンパイラは当時の同じバージョンの処理系で
コンパイルするのが常套ではないか?
もちろん、新しいコンパイラを使っても構わないが、動くように直すより、当時の規格に沿って
メンテした方が遥かに楽な場合が多いだろう。
そして、私の憎む君らが、知るべくもない仕様に基づいたバグにはまり、
(悲しく)つらい体験をするのを祈っているのだよ。
何か変?
566:デフォルトの名無しさん
07/07/07 00:31:11
ANSI以前のCで自動変数の配列を直接初期化できないのはまだ有名なほうだと思う。
567:495
07/07/07 00:34:10
>>560
眠いと勉強ははかどらないが、悪口ならいくらでもでてくるからなあ。
>>562
おやおや。私がまるで何も勉強してないとでも。
はい。腐るときは勝手に腐るのでいちいち構わなくてもいいですよ。
自称自己啓発君。>>562君がせめて鬱で自殺しませんように(爆
>>563
さっき言っただろう。
嵐の敵はみんなの無視。
眠くなったら寝るから気にするな。
568:デフォルトの名無しさん
07/07/07 00:35:46
>>566
んだな。
つうかそれ、もし対応して無いコンパイラを使ったら、コンパイル通らないだけ
じゃん。で、エラーメッセージが出力される。
全然困らんぞ。
ほんとうに昔のソースでは、確信犯的にリテラルを書き換えていることがあるが、
そっちのがまだ困るだろね。
ま、それに気づけば、コード書き換えるなり-fwritable-stringsを指定するなり
すればいいわけだが。
569:デフォルトの名無しさん
07/07/07 00:38:05
>>565
「メンテする憂き目」じゃなくて、
メンテする際につらい体験をするのを祈ってるって話だったのか
570:デフォルトの名無しさん
07/07/07 00:39:26
みんなこんなおっさん弄ってあげるなんて親切だなあ
571:495
07/07/07 01:14:31
>>568
古いANSI-C(K&R第2版の頃な)で
void foo {
int a[100] = {0};
...
}
とでも書いてみたまえ。コンパイルは通るがaの要素がa[0]以外全てランダム値で
深刻なバグに発展するかもしれんね?
つまりだね。たかが一つ昔の仕様を回避したところで、
反証にはならんのですね。
それを何を偉そうに「全然困らんぞ」だって?
自分で気づいて直すならまだマシだが、納品後にクレームの電話。待ちますか?
572:デフォルトの名無しさん
07/07/07 01:17:42
納品後ってコンパイル通ったらすぐ納品しちゃうの?そんなに切羽詰った職場なの?
573:495
07/07/07 01:28:59
>>572
ハイハイ。君の言ってる事は
「お前は何時何分地球が何回、回ったときに納品した?」
というレベル。
あっちでママが呼んでますよー。『そろそろ寝なさい』だって。ププ
574:495
07/07/07 01:31:27
もう厨房しか居ないし、寝るかな。
また明日ー。俺が気に入らなかったら削除依頼でも出しときな。
575:デフォルトの名無しさん
07/07/07 01:32:07
明日も来る気ですかw
おっさん忙しいんじゃなかったのかw
576:デフォルトの名無しさん
07/07/07 02:03:04
Kusakabe と毛色は違うが同類だな
577:デフォルトの名無しさん
07/07/07 02:26:42
削除依頼ワラタ
削除したいのはお前だけだって
578:デフォルトの名無しさん
07/07/07 04:20:16
よっぽど自分の間違いを「なかったこと」にしたいんだろうなぁ。
こういう責任の自覚がない香具師が下らん犯罪の元仁になったりするんだ。
くわばらくわばら
579:デフォルトの名無しさん
07/07/07 05:51:35
新しい仕様はC++には取り入れられないのかな?
580:デフォルトの名無しさん
07/07/07 05:51:49
新しい仕様はC++には取り入れられないのかな?
581:デフォルトの名無しさん
07/07/07 05:51:57 BE:115689986-2BP(7)
新しい仕様はC++には取り入れられないのかな?
582:デフォルトの名無しさん
07/07/07 05:52:02
新しい仕様はC++には取り入れられないのかな?
583:デフォルトの名無しさん
07/07/07 10:19:27
>>524
そんな問題とは違うだろ
新しいルールは後から参加してきた守銭奴によって政治的に作られるんだから
自然の法則に従って限界に達して出てきた障害とは一緒にするな
584:デフォルトの名無しさん
07/07/07 10:23:09
>>579-582
URLリンク(www.open-std.org)
585:495
07/07/07 10:55:13
なんだ。捨て台詞しかないのか。ツマラン
586:デフォルトの名無しさん
07/07/07 11:04:21
windowsのSIZEとかPOINTとかRECTの構造体で、
メンバの型をtemplate構文を使うことにより自由に決められるやつってありますか?
こういうのって絶対誰もが考えると思うんだけどWTLにすらなくて・・・
自力で実装するしかないんでしょうか?(´・ω・`)
587:デフォルトの名無しさん
07/07/07 11:07:04
はあ?
588:デフォルトの名無しさん
07/07/07 11:10:46
>>585
いい加減ネタも尽きて来たしな。
>>586
ないね。俺も考えたことあるけど。
589:デフォルトの名無しさん
07/07/07 11:29:17
>>586
あるよ。ほら。
template<typename T>class size
{
T width_;
T height_;
public:
size() : width_(), height_() {}
size(T width, T height) : width_(width), height_(height) {}
size(const size & foo) : width_(foo.width()), height_(foo.height()) {}
size & operator=(const size & foo) {width_ = foo.width(); height_ = foo.height(); return * this;}
bool operator==(const size & foo) const {return width() == foo.width() && height() == foo.height();}
T width() const {return width_;}
T height() const {return height_;}
T area() const {return width() * height();}
};
今作ったからバグってるかも知れないけど。
590:デフォルトの名無しさん
07/07/07 13:03:31
環境依存すらOKのスレで、
古いANSI-Cが前提となっている理由が理解できない。
それは君の勉強不足だろうと。
591:デフォルトの名無しさん
07/07/07 13:18:15
やっぱ無いんですね・・・
とりあえずsizeは参考にさせてもらいます
仕方ないのでboostとか使ってSTL対応の格好いいのを作っちゃうことにします(`・ω・´)
いざ出来ても動作が重いとかサイズを食うとかで結局使わない感バリバリですが…
592:デフォルトの名無しさん
07/07/07 13:22:47
つうかWin32APIに渡す時点で構造体サイズは結局そこに合わせなきゃいけないから
RECT<float>とかしたところでたいした意味はない
593:デフォルトの名無しさん
07/07/07 13:29:28
結局変換の時に一時オブジェクト生成する分オーバーヘッドになるだけですか…
それでもAPIに渡すまででポータブルに扱う分には役立つだろうと思ったけどあまり意味無いですね(´・ω・`)
594:デフォルトの名無しさん
07/07/07 13:32:55
>>593
>589程度のクラスなら、どうせ最適化で消えるだろうからどんどん使えば?
size, point, rect辺りの綺麗にまとまったテンプレートクラスにして公開してくれたら
積極的に使ってあげるよ。
595:デフォルトの名無しさん
07/07/07 21:38:05
C++の質問があります。
map<int, FUNC> MAP;
キーをint型、値を関数ポインタで、関数ポインタに関しては、他のクラスのメンバ関数も
セット出来るようにしたいのですが、FUNCの定義の仕方がイマイチ分かりません。
御願いします。
596:デフォルトの名無しさん
07/07/07 21:40:05
>>595
メンバ関数ポインタを他のクラスのも使えるようにするってあーた・・・・
thisポインタをどうやって区別するつもり?
597:デフォルトの名無しさん
07/07/07 21:40:20
boost::function
598:デフォルトの名無しさん
07/07/07 21:46:26
>>595
つBoost.Bind
599:デフォルトの名無しさん
07/07/07 21:47:36
>>598 bind は型じゃないだろ。
600:デフォルトの名無しさん
07/07/07 21:49:57
仮想関数へのポインタなら、基底クラスの関数ポインタを使っとけば大丈夫。
601:デフォルトの名無しさん
07/07/07 23:36:29
オーバーロードされたコンストラクタについて質問です。
class A
{
int data;
public:
A(int x, int y){
data = x+y;
}
A(int x){
A(x, 0);
}
};
のような感じで、2つ目のコンストラクタは1つ目のコンストラクタを内部で呼んでいるのですが、
うまく値が入りません。
(これは例なので簡単にしてありますが、実際はもっと複雑なことをしています)
コンストラクタの中で別のコンストラクタを呼ぶことはできないんでしょうか?
いちおうコンパイルは通るのですが。
602:デフォルトの名無しさん
07/07/07 23:39:16
できない。
A(x, 0)は単に一時オブジェクトを作る式となるだけ。
元のオブジェクトとは何の関係も持たない。
603:デフォルトの名無しさん
07/07/07 23:41:01
何でデストラクタは単体で呼べるのにコンストラクタは呼べないの?
604:601
07/07/07 23:42:02
なるほどそういう意味ですか。
ではどうするのがスマートなやりかたでしょうか?
初期化用の関数を作ってそれぞれのコンストラクタから呼ぶのがいいんでしょうか?
605:デフォルトの名無しさん
07/07/07 23:47:29
結局それが一番だよ。
606:デフォルトの名無しさん
07/07/07 23:47:43
>>603
placement new を使えば単体でコンストラクタを実行することはできる。
でもコンストラクタの中で自身に対して使っても正しい意味は成さない。
デストラクタだって、デストラクタの中から自身に対して呼んだりしちゃいけない。
607:デフォルトの名無しさん
07/07/08 00:13:21
deleteするとき、与えられたポインタの型が元のポインタの型ではなかった場合でも、正常に削除できますか?
int *int_ptr = new int;
void *void_ptr = reinterpret_cast<void *>(int_ptr);
...
delete void_ptr;
608:デフォルトの名無しさん
07/07/08 00:24:20
PODならmalloc/freeでいいんでないの。
609:デフォルトの名無しさん
07/07/08 00:38:01
>>607
deleteでは、オブジェクトのデストラクタを呼んだ後
メモリを確保する必要があって
そのデストラクタが正しく呼べるなら違うポインタ型にしてもOk。
610:デフォルトの名無しさん
07/07/08 00:48:13
みなさんデストラクタの戻り値はチェックしていますか?
611:デフォルトの名無しさん
07/07/08 00:49:47
>>610
基本中の基本
612:デフォルトの名無しさん
07/07/08 00:56:12
僕はコンストラクタの戻り値もチェックしてまつよ(`・ω・´)
613:デフォルトの名無しさん
07/07/08 00:56:44
>>610 無理。
614:デフォルトの名無しさん
07/07/08 00:59:01
>>607 ダメ。未定義動作。 5.3.5p3
615:デフォルトの名無しさん
07/07/08 01:13:30
C++を始めてする人にオススメという本はないでしょうか
自分はC言語を少し齧った程度で、オブジェクト指向の意味すらわかりません
616:デフォルトの名無しさん
07/07/08 01:19:40
>>615
メイヤーの「Eiffelオブジェクト指向入門」がオススメ
617:デフォルトの名無しさん
07/07/08 01:27:51
>>616
教えてくれてありがとうございます、明日辺り早速本屋で探してこようと思います
618:デフォルトの名無しさん
07/07/08 01:39:11
おいおい
619:617
07/07/08 01:40:38
>>618
おいおいとか言われたら不安になるじゃないかぁーーー!!
620:デフォルトの名無しさん
07/07/08 01:41:25
おれはこのページだけで勉強した
URLリンク(www.asahi-net.or.jp)
少し古いけど初心者が勉強するには十分
621:デフォルトの名無しさん
07/07/08 01:49:14
>>620
全俺が感動した
622:デフォルトの名無しさん
07/07/08 02:04:16
>>617
俺もその本は持っているが、とても実践向きじゃない。
十数年前はオブジェクト指向なんて言葉自体珍しかったから、名前だけで買ってしまった。
Eiffel(エッフェル)なんて、謎の言語を覚える気なら敢えて止めはしない。
623:デフォルトの名無しさん
07/07/08 02:24:20
オブジェクト指向理解のためなら、JavaかC#あたりのほうがとっつきやすい。
C++はいろいろ細かいルールが多すぎて焦点がぼける感がある。
624:デフォルトの名無しさん
07/07/08 02:37:45
細かいルール云々というよりC++はマルチパラダイムなために、
オブジェクト指向に限らないというのが逆に理解のネックになるのかもな。
初心者だった頃先輩に薦められてModernC++Designを読んだときは一気に挫折しかけたwww
625:デフォルトの名無しさん
07/07/08 07:30:41
SADでも必死に会社に行っている人 [メンタルヘルス]
626:デフォルトの名無しさん
07/07/08 07:57:28
>>607
"デストラクタ virtual" でぐぐれ
627:デフォルトの名無しさん
07/07/08 08:41:03
>>620
そのサイトは間違いを指摘しても直さないから余りお勧めできないが。
628:デフォルトの名無しさん
07/07/08 09:14:02
最初に勉強に使ったページ
URLリンク(www.asahi-net.or.jp)
と
URLリンク(www.geocities.jp)
補足に使ってるページ
URLリンク(www.cmagazine.jp)
URLリンク(homepage2.nifty.com)
URLリンク(www.scl.kyoto-u.ac.jp)
URLリンク(www.s34.co.jp)
629:デフォルトの名無しさん
07/07/08 09:44:26
>最初に勉強に使ったページ
>URLリンク(www.asahi-net.or.jp)
>627
>URLリンク(www.geocities.jp)
不明。
>補足に使ってるページ
>URLリンク(www.cmagazine.jp)
ダメダメ。
>URLリンク(homepage2.nifty.com)
>URLリンク(www.scl.kyoto-u.ac.jp)
>URLリンク(www.s34.co.jp)
不明。
630:デフォルトの名無しさん
07/07/08 09:55:37
C の勉強を K&R だけでやった。
C++ というかオブジェクト指向の入門を C Magazine の
連載だったと思う A級B型C++ だけでやった。
あとはテクニック本をよみつつ、本当に疑問に思った仕様は
おおもとの仕様書(規格書)にあたる。
631:デフォルトの名無しさん
07/07/08 10:02:40
>>627
暇そうなのにね
632:デフォルトの名無しさん
07/07/08 10:05:09
不明=別にどっちでもいいよって事だな
えぴの記事は内容は古いけど初心者がC++の深遠を覗くにはいいと思うし
あとC++プライマーとか普通の入門書を一冊手元においておけばどんなページでも役に立つと思うぜ
633:デフォルトの名無しさん
07/07/08 10:06:09
>>630
仕様とパラダイムは違うからねぇ
634:デフォルトの名無しさん
07/07/08 10:39:28
VC++とWin32APIプログラミングの違いが分かりません(´・ω・`)
635:デフォルトの名無しさん
07/07/08 10:51:09
ワープロと小論文の違いがわかりませんと言われても困る。
636:デフォルトの名無しさん
07/07/08 11:12:10
VC++使ってるけど Win32 API なんてほとんど使わないなぁ。
637:デフォルトの名無しさん
07/07/08 11:44:44
俺ライブラリとかATLとかその他公開されているライブラリにラップして使ってる人が殆どだと思う
638:デフォルトの名無しさん
07/07/08 13:28:24
10年前にVC++6.0使ってたんだけど、
今はWindowsでのC++開発環境って何がメジャーなの?
VC++2007ってありますか?
639:デフォルトの名無しさん
07/07/08 13:30:39
残念ながらVS2008になりそうです
640:デフォルトの名無しさん
07/07/08 13:41:35
>>638
「VC++」でぐぐるとVisual Studio 2005のページが出てくるから、とりあえずそこ読んでおけ
641:デフォルトの名無しさん
07/07/08 13:44:19
cygwin/gcc/g++
mingw
642:デフォルトの名無しさん
07/07/08 15:24:33
コンパイル時に数が決まっている要素の数をカウントしたいんですが、
643:デフォルトの名無しさん
07/07/08 15:29:09
elementofマクロの話?
644:デフォルトの名無しさん
07/07/08 15:47:34
すみません。途中で送信されてしまったようです。
コンパイル時に数が決まっている要素(あるクラスを継承しているクラス)の数をカウントしたいんですが、
マクロの様なものを単純にコピペするだけでカウントするにはどうすればいいんでしょうか。
645:デフォルトの名無しさん
07/07/08 16:01:43
詳細が分からんと何も言えん
646:デフォルトの名無しさん
07/07/08 16:18:54
あるクラスを継承しているクラスの総数を知りたい?
それはリンク段階でしか判らないこと無いか?
647:デフォルトの名無しさん
07/07/08 16:36:31
同一ソースコードに書いてあるので、コンパイル時にコードを下へ逐次見ていくだけで機械的にカウントできます。
648:デフォルトの名無しさん
07/07/08 16:37:28
今boost::preprocessorを使ってもがいてます...
649:デフォルトの名無しさん
07/07/08 16:46:40
VC++1.51をWIN98で使ってるんですが、DOSのプログラムを組んで走らせると
ハングする事が多いです。BCC5.5でコンパイルすると問題無く動くのですが。
1.51でDLL16使うのはWIN95までしか対応してないのでしょうか。
650:デフォルトの名無しさん
07/07/08 16:58:25
>>649
IDE自体はWin9x/NT系で動かすとハングしやすいな。
デバッグ実行は特にめろめろだが、
作ったプログラムが単体でハングするならそれはあなたの作ったバグ。
651:デフォルトの名無しさん
07/07/08 18:10:53
builderで、警告が100個超えたら、
「エラーあるいは警告が多すぎる」と、最後にエラーが出てきました。
警告の上限の数は、決まってますか?
652:デフォルトの名無しさん
07/07/08 19:26:18
C言語でputchar('a');みたいに'あ'を出力するにはどうすれば良いでしょうか?
ググってみたら
#include <stdio.h>
#include <wchar.h>
int main(void)
{
putwchar(L'あ');
return 0;
}
こうかと思ったのですが、どうも違うようでよく分からないですorz
653:デフォルトの名無しさん
07/07/08 19:27:39
printf("あ");
654:デフォルトの名無しさん
07/07/08 19:27:52
Visual C++ 2008 になったら tr1 とかも実装されるのかな。
C99 互換モードとかもつくのかな。
655:デフォルトの名無しさん
07/07/08 19:28:17
>>651
コンパイラ次第
656:デフォルトの名無しさん
07/07/08 19:31:01
>>653
書いた後でそう言われそうだと思ったけど、
そういう意味じゃなくて、
int hoge='a';
putchar(hoge);
こういう感じで'あ'を扱うにはどうしたら良いでしょうか?
657:デフォルトの名無しさん
07/07/08 19:36:28
a と あ って全然違うだろ。1バイトと2バイトだし
658:デフォルトの名無しさん
07/07/08 19:37:19
UTF-8 なら3バイト。
659:デフォルトの名無しさん
07/07/08 19:39:29
>>656
char hoge="あ";
putchar(hoge);
660:デフォルトの名無しさん
07/07/08 19:39:44
>>659
コンパイルエラー
661:デフォルトの名無しさん
07/07/08 19:40:43
wint_t hoge='あ';
putwchar(hoge);
662:デフォルトの名無しさん
07/07/08 19:40:44
>>659
それなら、
char hoge[]="あ";
にしないとまずいだろ。
663:デフォルトの名無しさん
07/07/08 19:43:25
あまりにもひどい流れだ
664:デフォルトの名無しさん
07/07/08 19:48:08
>>660
自分もそうやるのかと思ったんですが、
それだと何も表示されないです。(VC++2005で)
665:デフォルトの名無しさん
07/07/08 19:56:05
ぬるぽ
666:デフォルトの名無しさん
07/07/08 19:56:43
666
667:デフォルトの名無しさん
07/07/08 20:02:53
ロケール?
668:デフォルトの名無しさん
07/07/08 20:06:59
あはなぁ・・・・
669:デフォルトの名無しさん
07/07/08 20:16:32
文字型を文字列で初期化できるわけねーだろ
670:デフォルトの名無しさん
07/07/08 20:22:14
>>652
↓で良いが、例えばVC++8.0(VS2005)ではバグによって何も表示されない。
wchar_tやロケールまわりをまともに使える処理系か確認するこった。
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(void)
{
setlocale(LC_CTYPE, "");
putwchar(L'あ');
return 0;
}
671:デフォルトの名無しさん
07/07/08 20:29:35
wchar_t を使う事は根本的な解決になってるんだろうか。
672:デフォルトの名無しさん
07/07/08 21:06:30
>>652
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(void)
{
setlocale(LC_ALL, "");
putwchar(L'あ');
return 0;
}
Visual C++ 2005だとこれだけではバグってだめみたいだけど。
673:デフォルトの名無しさん
07/07/08 21:23:41
>>670,>>672
ありがとうございます。
ちょっとbcc入れるのに手こずってました。
bccだと無事に動くっぽいですが、VCではダメなんですね。
しかしこれって単純に出来るものかと思ってたら、
意外と上手いこといかないものなんですね><
674:デフォルトの名無しさん
07/07/08 21:25:33
>>673
VC++でも以前のバージョンなら問題なく動くんだがな
675:デフォルトの名無しさん
07/07/08 21:39:11
Visual Studio 2005買うか迷う
早く2007か2008発売してくれたらいいんだけどな…
676:デフォルトの名無しさん
07/07/08 21:41:47
今買うのはいかにも時期が悪いだろう
バグ持ちだしな(SPでも直ってねぇし)
677:デフォルトの名無しさん
07/07/08 22:26:22
おれはEclipse派
678:デフォルトの名無しさん
07/07/08 22:50:56
あれだけ難しいと思ってた「C言語ポインタ完全制覇」が今なんとなく読んだら
全部スラスラと理解できてワロタ
昔買った本読み返すとあぁ俺ちゃんと成長してると実感できてうれしいなw
679:デフォルトの名無しさん
07/07/08 22:52:44
ちょうどあるから読んでみよっと
680:デフォルトの名無しさん
07/07/08 22:55:05
Modernはいまだに7割くらいしか理解できん…
681:デフォルトの名無しさん
07/07/08 23:54:54
>675
2008は4Q(多分12月ごろ)。MSDNにすれば?
682:デフォルトの名無しさん
07/07/09 01:30:28
すみませんが質問です。
ある関数のバイナリを表示するプログラムを作ったのですが思ったとおりに表示されません。
source:
#include <stdio.h>
int func(void)//この関数のバイナリを表示したい。
{
return 0x12345678;
}
void fend(void){}//func関数の終わりをこの関数のアドレスから求める。
int main(void)
{
char *p;
char i;
p = (char *)func;//func関数のアドレスをchar型のポインタへ代入。
for(i=1; p<(char *)fend; i++) {
printf("%2.2X ", *p++);//func関数のバイナリを1バイトごとに表示。
if(!(i%16)) putchar('\n');//とりあえず16バイトごとに改行。
}
return 0;
}
result:
55 FFFFFF8B FFFFFFEC FFFFFFB8 78 56 34 12 5D FFFFFFC3
55 8B EC B8 78 56 34 12 5D C3と表示されるのを期待していたのですがうまくいきません。
コンパイラはBorlandコンパイラです。
根本的な間違いの指摘、もしくは強引な方法でうまく表示させる方法を教えてください。
683:デフォルトの名無しさん
07/07/09 01:34:30
>>682
そこまでできてるんなら char を unsigned char にすればいけそうな気はするね。
でも、移植性のあるコードじゃないことは理解しておけよ。
684:682
07/07/09 01:36:30
>>683
685:デフォルトの名無しさん
07/07/09 01:37:00
pの型を char → unsigned char
686:デフォルトの名無しさん
07/07/09 01:38:46
ついでに、%2.2Xは%Xで大丈夫な希ガス
687:682
07/07/09 01:39:53
ミスりました。
>>683
ありがとうございます。
解決できました。
移植性のないコードであることは百も承知でございます。
cl.exeでコンパイルするとうまくC3のret命令で終わらなかったです。
ただ、アセンブリの勉強のために作ったので自らの環境で動けば問題なしです。
ご丁寧にどうもありがとうございました。
688:デフォルトの名無しさん
07/07/09 01:45:28
1byte文字、2byte文字が混ざった文字列から、
1文字ずつ読み込んで、これが1byteか2byteか判定するにはどうしたら良いでしょうか?
お願いします。
689:デフォルトの名無しさん
07/07/09 01:48:08
txtから数字を読み込んでバブルソートするプログラムを組みたいのですが
(数字は一行ずつ記述された状態)
出来ればそのあとさらにtxtに出力したいです
fgetsに関する記述方法がいまいち理解できないです
この後にどのような記述をすればいいのでしょうか
#include<stdio.h>
#include<stdlib.h>
#define swap(type,x,y) do{type t=x;x=y;y=t;}while(0)
int bubble(int a[],int n)
{
int i,j;
for(i=0;i<n-1;i++){
for(j=n-1;j>i;j--){
if(a[j-1]>a[j]){
swap(int,a[j-1],a[j]);
}
}
}
}
int main(void)
{
FILE *fp;
if((fp=fopen("data.txt","r"))==NULL){
printf("file open失敗\n");
exit(1);
}
while(fgets(
690:デフォルトの名無しさん
07/07/09 01:49:02
gccだと型そのままでも %02hhX にすれば問題なく表示できるんだが
bccでも同じなのかどうかは知らない
まぁ、バイナリ扱うなら unsigned char にしとくほうが良いだろうけど
691:デフォルトの名無しさん
07/07/09 01:56:53
>>689
フォーマットが固定ならfscanfで読み込んでfprintfで出力すれば良いだけだと思うけど
fgetsで読み込みたいなら読み込んだ奴をstrtolするかsscanfにかければいいし
692:デフォルトの名無しさん
07/07/09 02:08:14
カレーが食べたいよ
693:デフォルトの名無しさん
07/07/09 04:08:03
>>678
遅レスだけど、俺もスラスラ読めて、さらには
「JAVAだとどうだとか、ほっといたれや」
とまで思ったりして、はじめ読んだときは「なるほどな~」と
思ってたのに、今じゃ文句までつけやがる俺。
どんどんひねくれていく自分に嫌気がさす。
694:デフォルトの名無しさん
07/07/09 07:03:58
>>682
func と fend がメモリ上で連続する保証はあるの?
695:デフォルトの名無しさん
07/07/09 08:13:30
>>694
ない。でも>>687
696:デフォルトの名無しさん
07/07/09 14:14:04
age
697:デフォルトの名無しさん
07/07/09 14:15:09
sage
698:デフォルトの名無しさん
07/07/09 15:40:00
おしえてください (VC++ 6.0 MFC)
エディットコントロールに複数行の文字列を表示させた時、
その時のスクロールの位置を一番下の行にしたいのですが、うまくいきません。
m_editMsg.SetWindowText( m_strLog );
m_editMsg.SetScrollPos( SB_VERT, m_editMsg.GetScrollLimit( SB_VERT ) );
この処理を行うと、スクロールバー自体は一番下の行に移動した様な表示になるのですが、
表示される文字列データは、先頭部分が表示されてしまいます。
どうしたらいいのか教えて下さい。お願いします。
699:デフォルトの名無しさん
07/07/09 16:24:14
エディットは、キャレットの位置を動かせ
EM_SETSEL 使えばいいかな。
700:デフォルトの名無しさん
07/07/09 16:44:31
>>687
関数間が NOP (90h) で埋められてるなら
NOP が出てくるまで・・・と出来そうな気はするけど、
コードの途中で境界合わせに NOP が出てこない保証もないし、
ダメかなあ・・・。
701:デフォルトの名無しさん
07/07/09 16:58:25
>>700
定義順に関数アドレスが並ぶ保証はどこにもないよ
702:デフォルトの名無しさん
07/07/09 17:12:31
>>699
ありがとうございます。調べてみます。
703:デフォルトの名無しさん
07/07/09 17:51:57
>>701
?
704:デフォルトの名無しさん
07/07/09 18:17:06
>>700
関数間がNOPで埋められる保証もどこにも無いよ。
705:デフォルトの名無しさん
07/07/09 19:37:39
>>704
「関数間が NOP (90h) で埋められてるなら」
という条件付きで話してる事に、そう言われても・・・
706:デフォルトの名無しさん
07/07/09 19:42:30
この手の板にはよくあること
707:デフォルトの名無しさん
07/07/09 19:43:36
関数のアドレスが、ジャンプテーブルだったりするのも
よくある話。
708:デフォルトの名無しさん
07/07/09 20:06:18
C++だけではGUIって作れない?
API勉強しないとだめ?
709:デフォルトの名無しさん
07/07/09 20:09:33
>>708
「C++だけ」ってのが「標準C++ライブラリだけ」ってことならyesだな
710:デフォルトの名無しさん
07/07/09 20:19:22
>>709
ありがとう。さすがにCUIばっかりで飽きてきちゃったからAPI勉強してみる(`・ω・´)
711:デフォルトの名無しさん
07/07/09 20:34:28
>>709
否定形の問いかけに対して安易にyesと答えてはいけないw
712:デフォルトの名無しさん
07/07/09 20:56:37
>>705
VC2005だとそうなっては無かったから、
結構多くのコンパイラでその仮定は間違っているんじゃ無いの? と思っただけ。
どっちにしても>>700はあんまり意味無さそうだね。
713:デフォルトの名無しさん
07/07/09 21:24:20
>>707
vc8のインラインアセンブラだと
× call printf
○ call dword ptr [printf]
○ call test_func
○ call dword ptr [test_func]
(test_funcは同じオブジェクト内の自作関数)
じゃないとうまく動かなかった。
不思議なような、そうでもないような。うーん。
714:デフォルトの名無しさん
07/07/09 21:32:18
call printfがだめなのは、ランタイムDLLを使っているからという可能性は無い?
715:デフォルトの名無しさん
07/07/09 21:40:08
>>714
That's right ! そのとおりだった!
ってか、前にMTでテストしたはずだったんだけどな・・・orz
716:デフォルトの名無しさん
07/07/09 23:51:37
関数最後のサブルーチンコールはジャンプで実装する最適化もあるぞ。
717:デフォルトの名無しさん
07/07/10 00:19:18
>>712
昔の VC6 くらいそうなってなかったかなあ。
718:デフォルトの名無しさん
07/07/10 09:55:26
2005もDebugとReleaseで違うしな
719:デフォルトの名無しさん
07/07/10 21:51:23
質問です。
基本的にMFCのDoc-Viewを用いたプログラムです。自分で生成した特定の
ウィンドウのスナップショットを、画像に保存したいのですが、どのようなアプローチで
進めたらいいのか悩んでいます。
1. 非アクティブまたは非表示な場合でも、フレームを含めたウィンドウ全体を
画像として取得するような手段はあるのでしょうか?
2. 1.が不可能なら、非アクティブまたは非表示で、ウィンドウの内容(例えばCViewの
中身)のみを取得する手段はあるのでしょうか?
XP VC2005 SP1
720:デフォルトの名無しさん
07/07/10 22:07:13
fgets(str,N-1,stdin);
printf("%d",(int)strlen(str));
↑な感じのコードを書いて実行させると、
【実行画面】
>hoge
5
となるのですが、これってどうなっているのでしょうか?
721:デフォルトの名無しさん
07/07/10 22:12:05
hogeの後に改行文字がくっついてて、それも数えられてるから
722:デフォルトの名無しさん
07/07/10 22:14:58
あぁ、改行文字を読み込んでたのか!
ヌル文字は入れないはずなのになんでかと思ったら…。
>>721サンクスです!
723:デフォルトの名無しさん
07/07/10 23:00:52
>>718
2005だとRelease,Debugとも基本的にNOPは使ってないよ。
724:デフォルトの名無しさん
07/07/10 23:24:29
char str[10]="piyo";
これでstrが指す場所を"yo"にしたいのですが、
どうすれば良いでしょうか?
725:デフォルトの名無しさん
07/07/10 23:25:23
>>724
strcpy(str, "yo");
726:デフォルトの名無しさん
07/07/10 23:28:13
>>725
char *str2 = &str[2];
727:デフォルトの名無しさん
07/07/10 23:31:52
>>725
文字列をコピーしたいってより、yoの場所まで移動させたいのです。
array[i++]=strtol(str,&err,0);
これを繰り返し行う際にstrをstrから任意のバイト分進めた値にして
文字列を完全に走査、数値格納したいのです。
728:デフォルトの名無しさん
07/07/10 23:39:50
そのstrは配列だからそもそも指すとかそういう表現はしない
&str[2]とかstr+2好きなように表記すればよか
これが気持ち悪いなら別途charへのポインタ用意して
char *p=str;
とした後に読み進めたいバイト分だけp+=2みたいにインクリメントすればいい
729:デフォルトの名無しさん
07/07/10 23:41:26
char* p = &str[2];
でいいんじゃね
730:デフォルトの名無しさん
07/07/10 23:44:48
str[i]2
731:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/10 23:47:28
>>726,>>728-729
なるほど、ありがとうございます。
それを参考にちょっと今から思った通り出きるか作ってみます。
733:732
07/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:デフォルトの名無しさん
07/07/11 00:37:08
#define N 256
735:デフォルトの名無しさん
07/07/11 00:37:13
あれ、>>732で>>731さんへのアンカを入れ忘れてました…。
申し訳ない、>>731さんも激しくありがとうございます。
736:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/11 01:03:17
つURLリンク(www.fides.dti.ne.jp)
738:デフォルトの名無しさん
07/07/11 01:06:12
呼び出し側のコードはどうなってんの
739:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/11 01:58:14
>>737
>>738
>>739
見づらくてすいません。
C++にそんな仕様があるとは知りませんでした。
ありがとうございました。
参考までに
>あとvirtualな関数にデフォルトパラメータつけるな
は何故でしょうか?
741:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/11 02:11:50
>>741
> pd->(foo);
モチツケ
743:デフォルトの名無しさん
07/07/11 02:24:20
>>741
なるほど。納得しました。
ありがとうございます。
744:デフォルトの名無しさん
07/07/11 10:08:49
>>188
PHPアプリとCアプリとログ出力先を共通化という
無茶な事を要求されているときも
行単位の一発書き込みなら大丈夫かな?
2プロセス立ち上げてそれぞれ適当に書き込みをさせて
100万回くらいテストしたんだけど これで混ざんなかったから
多分大丈夫だよね?
745:デフォルトの名無しさん
07/07/11 10:52:14
>>744
「行単位の一発書き込み」がシステムコールレベルでそうなっているなら大丈夫。
具体的には、(直接的または間接的に)O_APPENDでopen()されており、write()
一発で1行を書き込んでいるなら大丈夫。
それから少しでもズレるならダメ。
Win32の場合、O_APPENDに相当する機能がCreateFile()に存在しないので、
*必ず*排他が必須になるようだ。
746:デフォルトの名無しさん
07/07/11 14:55:19
質問失礼します。
シャノンの符号化法による符号語生成プログラムと、
表計算ソフトを用いた符号語生成の違いについて説明して頂けないでしょうか?
よろしくお願いします。
747:デフォルトの名無しさん
07/07/11 16:23:30
>>746
表計算ソフトを用いた符号語生成って、何のことか教えて。
748:デフォルトの名無しさん
07/07/11 21:59:26
>>743
ちなみに741の問題を回避するためにもNVIパターンが使えるぞ。
749:デフォルトの名無しさん
07/07/12 08:23:23
すみません
string型でファイル名を持っているとき、それをオープンしようとすると
エラーが出ます。char型にするにはどうすれば良いですか?
750:749
07/07/12 08:26:48
自己解決しました
751:デフォルトの名無しさん
07/07/12 08:26:59
つc_str()
752:デフォルトの名無しさん
07/07/12 08:27:49
ありがとうございました
753:デフォルトの名無しさん
07/07/12 08:51:04
ファイルを読み込むとき、終端で必要以上のサイズを
読み込むと配列が最後まで埋まってしまいます
どうすれば実データのみ読めますか??
fp.read(str,N); とすると strのサイズはNになります
754:デフォルトの名無しさん
07/07/12 08:58:00
何使って読み込んでるの? fp の型は?
755:デフォルトの名無しさん
07/07/12 09:04:02
fstream fp ("filename", ios::in | ios::binary );
なんですけど、fp.read(str,N); の戻り値は、istream 型です
どうすればサイズがわかりますか??
756:755
07/07/12 09:24:03
自己解決しました
fp.gcount();で読み込みサイズが出ました