- 1 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:02:46 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/
- 441 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 19:26:00 ]
- STLがどんなにクソッタレでも、C++標準に入っている以上、しかたない。
あの万能ナイフっぷりには呆れるぜ。
- 442 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 20:33:49 ]
- こんな風にC++の標準関数まとめてくれてるサイトない?
ttp://cham.ne.jp/piro/p_stdfunc.html
- 443 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 22:26:36 ]
- ある
- 444 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 22:30:38 ]
- 本スレテンプレのコレとか
ttp://www.cppreference.com/index.html
- 445 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 22:48:49 ]
- >>439
436が使ったことないって言うから、 早速使えそうなものを薦めてみた。 うんちく語っても仕方がないと思ったし。
- 446 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 23:05:10 ]
- じゃあSTLはまぁそこそこ使える、かつ稲葉氏のページにあるものは一通り知っている
っていう人に対してお勧めのboost library(sandbox含む)を教えてください
- 447 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 09:48:04 ]
- STLは機能が多すぎて、つまり、注意事項が多すぎて、怖い。
オブジェクトを手っ取り早く永続化したくて、 一定のアドレスにオブジェクトを配置する、 カスタムなヒープを使う、カスタムなアロケータを 使うように指示して、それがちゃんと使われるのか、とか。
- 448 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 10:07:28 ]
- >>447
そんだけなら単にSTLコンテナ宣言してる場所をgrepすりゃいいだけじゃね つか、STLに限った話じゃ全然ねー STL使わんでも普通にmalloc()だのnewだの使われたくないんだろ? アホじゃないの?
- 449 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 11:23:31 ]
- >>447
アロケータは使い方を知らないとハマるわな。
- 450 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 11:30:39 ]
- 実装によってはアロケータをガン無視しちゃってるのがなかったっけ
- 451 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 13:23:33 ]
- setやmapをそのままシリアライズしたいって思うことあるよなぁ。
iteratorで舐めてファイルに書きだしたものを、 ファイルから読んで1つずつinsertするのは、 なーんか無駄っぽいんだ。
- 452 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 16:23:59 ]
- ライブラリにしとけばええやん。
- 453 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 20:32:59 ]
- >>452
そういうことではなくて、B木の構築コストがもったいない。
- 454 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 11:19:09 ]
- ほんと初歩的な事なんですが・・・
C言語には行とかいうのは関係なくて全部一行で書けるって聞いたんですが #include<stdio.h> main()〜 っていうのはどうやっても出来ないんでしょうか?
- 455 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 11:40:20 ]
- #include はC言語じゃなくてプリプロセッサ用
- 456 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 13:57:29 ]
- >>455
プリプロセッサっていうのは、コンパイルの時の処理ですよね 一行ずつ読み込む・・・から、 やっぱ、無理って事でしょうか?
- 457 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 14:08:36 ]
- ヘッダファイルの中から使う分だけ直接持ってくりゃいいべ
- 458 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 17:44:03 ]
- >>457
その手が、、、あった。。。ありがとうございました
- 459 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 22:25:40 ]
- 標準ライブラリのヘッダの中身って結構処理系独自拡張のオンパレードだから、
あまりおすすめできないけどな。
- 460 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 22:26:50 ]
- 7行プログラムとかlisp500とか書きたいんだろうか
- 461 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 00:07:56 ]
- プロトタイプと構造体とtypedefくらいだべ
- 462 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 06:21:10 ]
- 大きな配列を確保する際、newやmallocだと確保できるのに、
プログラム中に最初から double a[100000] のように書くと実行時に確保できない旨のエラーがデルのは何故ですか?
- 463 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 06:41:41 ]
- スタック領域
- 464 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 06:51:11 ]
- >>462
staticでもつければ?
- 465 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 13:20:28 ]
- >>462
スタック領域が足りなくなるから。 環境によってはスタック領域を大きくできるぞ。
- 466 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 11:12:57 ]
- スタックとヒープの違いを把握しましょう
- 467 名前:デフォルトの名無しさん [2007/07/09(月) 13:51:14 ]
- ご教授お願いします。
コード kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4566.txt 不正なbreakですとなってしまいます。なぜでしょうか?
- 468 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 13:53:55 ]
- >>467
なんちゅうスタック破壊
- 469 名前:467 ◆4usmhdjocU [2007/07/09(月) 14:01:12 ]
- すみません詳しく教えていただけると助かるのですが・・・
- 470 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:01:25 ]
- 誤>printf("New string --->%s\n,tbl");
正>printf("New string --->%s\n",tbl);
- 471 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:01:59 ]
- >>467
このスレで何回も言ってることだが・・・。 ・エラーメッセージの類いは、一字一句そのままコピペすること。 往々にして勝手に要約して端折った部分に大切な情報がある。 それが大切だと分かってないから、問題の原因が理解できない。 ・デバッガでステップ実行すること。 がんばれ。
- 472 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:03:23 ]
- >>470
あーあ、答え書いちゃった。 プロセスを教えずにリザルトだけ教えていたら、 いつまでたっても467はヒヨコのままだぞ。
- 473 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:04:41 ]
- >>467
・forの書き方に問題があるから、不正なbreakになる。 ・>468も指摘しているが、printf()の使い方にも間違いがある。
- 474 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:04:41 ]
- >>469
getsは危険です絶対に使ってはなりません。
- 475 名前:467 ◆4usmhdjocU [2007/07/09(月) 14:07:17 ]
- C:\Documents and Settings\cp1\デスクトップ\testplog\test.cpp(39) : error C2043: 不正な 'break' です。
cl.exe の実行エラー: error C2043: 不正な 'break' です。 >>470 ありがとうございます >>471,472 わざわざ自分のことを考えていただきありがとうございます。 しかし、エラーがでてなおりません。 次はヒントでいいので教えていただけませんか?
- 476 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:07:40 ]
- 標準関数でtolower()ってのがあるから、使う時はtolower()使ってね☆
- 477 名前:467 ◆4usmhdjocU [2007/07/09(月) 14:08:19 ]
- とてつもない初歩的なミスでした・・・
聞いていたじぶんがはずかしくなりました>< お手数かけました
- 478 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:08:45 ]
- >>475
セミコロン getsとかtolowerとか、練習で問題文写してるんだろうから あんまり言うとわからなくなるぞ
- 479 名前:467 ◆4usmhdjocU mailto:sage [2007/07/09(月) 14:08:52 ]
- >>476
勉強します^^
- 480 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:09:27 ]
- for(i = 0;i < max;i++);
- 481 名前:467 ◆4usmhdjocU mailto:sage [2007/07/09(月) 14:10:14 ]
- >>478,480
ありがとうございました
- 482 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:26:19 ]
- そしてthruされる>473、>474……
- 483 名前:デフォルトの名無しさん [2007/07/09(月) 14:52:12 ]
- LINK : fatal error LNK1104: ファイル "win32.lib" を開けません。
link.exe の実行エラー これってどうやれば直りますか
- 484 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:52:58 ]
- そもそも、
固定の文字列を出力するのにprintfを使う getsを使う などという、 見習ってはいけない「お手本」を載せている、 クソッタレ参考書がいけないと思うんだよね。 いったい何十年前の本なんだよ、って感じ。
- 485 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 14:54:44 ]
- >>483
1. ライブラリ名が正しいか確認する 2. リンカのマニュアルを確認する
- 486 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 15:18:44 ]
- >>484
固定の文字列を出力するのにprintf()を使う以外の見習うべきお手本は何?
- 487 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 15:27:00 ]
- puts()
- 488 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 15:37:30 ]
- >>487
puts()に替えたら改行しちゃいました。どうしたらいいでしょう。
- 489 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 15:42:43 ]
- fputs()
- 490 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 15:49:06 ]
- どうせコンパイラが最適化でputs()に置き換えたりするんだからprintf()でいいじゃん。
- 491 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 15:56:06 ]
- そんなコンパイラはgccぐらいしか知らんが
- 492 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 16:10:55 ]
- 打つ量の削減とかそういう理由で使い分けてる
- 493 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 16:19:48 ]
- わかっていない人のために説明すると・・・
printfの第一引数は、あくまでも書式を指定するための文字列である。 だから、 printf("100%元気") ; なんてのは大間違いなわけ。 あえてprintfで任意の文字列を出力したいのであれば、 printf("%s", "100%元気") ; とすべき。 そんな間抜けな間違いはしないよ、というかもしれないが、うっかりミスは恐ろしいし、 void PrintMessage(char* szMessage) { printf(szMessage) ; } なんてことをやったりしたら、収拾がつかなくなる。
- 494 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 17:06:51 ]
- まあ
printf("%s\n", s); なら puts(s); 一択だわな。タイプ量が少なく効率も良い。 printf("%s", s); を fputs(s, stdout); にするかどうかは気分次第だな。 改行を打ち出す時は puts(""); が短いが、俺は putchar('\n'); を使うことがおおいな。
- 495 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 17:11:41 ]
- inline void NEW_LINE() {
putchar('\n'); } ::NEW_LINEみたいにしたり(w
- 496 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 17:13:03 ]
- >>495
賢いのう、ワレ!
- 497 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 18:44:07 ]
- >>484
> いったい何十年前の本なんだよ、って感じ。 昔のBASICなどのPRINTと同じ感覚の老人が書いた本だろ。
- 498 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 18:46:41 ]
- printf(name) ;
printf("\n") ; printf("ほげほげを入力してください。\n") ; printf("入力できる数値の範囲は、fooからbarです。\n") ; こんなの見たら卒倒するよ。
- 499 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 19:20:09 ]
- JavaやってからC++に戻ってくると>>498みたいに書きたくなる。
- 500 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 19:30:03 ]
- getsはともかく、printfは別にいいだろ
char配列そのままprintfに渡すのはまずいけど、 文字列リテラルなんかコンパイラによってはputsに置き換えたりする事もある
- 501 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 20:20:28 ]
- ループ成立w
- 502 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 20:32:46 ]
- 別にprintfでもputs/fputsでも、そんなん好みの問題やん。
- 503 名前:デフォルトの名無しさん [2007/07/09(月) 23:25:28 ]
- UDPの通信メッセージの最大長っていくつですか?(socket、bind、sendtoを使います)
SOCK_DGRAMで作成した場合は、固定長最大メッセージをサポート、 ってなってるから、約64KBまで送信できると思うのですが、イーサネットの フレーム長が1500byteまでとか言う風に書いてあって、よく分からないのです。 オフィス用の一般的なPC(WinXP SP2、10BASE-T)の環境でテストプログラムを 作ったところ、一応60KBちょいまで送受信できたので64KBまでOKなのかな? あと、さらに質問で、64KBまで送受信できるけどXXbyteを超えると信頼性が 著しく下がるとかありますか? また、上のほうでも書きましたが、イーサネットで1500byteってのはアプリケーションでは 意識してないけれど、ネットワーク層(?)とかデータリンク層(?)とかのレイヤが 勝手にセグメント化してくれてるのでしょうか? 長々として申し訳ないのですが、どなたかお助けを。
- 504 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 00:05:05 ]
- TCP/IPではパケットサイズを期待してはいけない。それは下位層によって1バイトずつに分断されているかもしれない。
UDPではパケット到来順序を期待してはいけない。それは経路によって順不同に並べ替えられているかもしれない。 だっけ?
- 505 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 08:40:13 ]
- >>503
> UDPの通信メッセージの最大長っていくつですか?(socket、bind、sendtoを使います) 環境による。 通信バッファが小さくて長いUDPパケットを受け取れない人もいるし、 なかには、受け取れないどころか即死するヘボ実装の人もいる。 両側とも自分で書いたプログラムなら、通信の最初に、 送受信できる最大サイズを調べるためのメッセージ交換を入れたらどうかな。 最初は128バイトあたりで、送受信を確認できたら、サイズを2倍にしていくの。 > イーサネットのフレーム長が1500byteまでとか言う風に書いてあって UDPパケットが長い場合、複数のイーサネットフレームに分割して送受信される。 > 64KBまで送受信できるけどXXbyteを超えると信頼性が著しく下がるとかありますか? パケットサイズが可変なのに対して、パケットのCRCチェックサムのビット数が固定なので、 長さに比例してエラー検出能力が下がっていくけど、あんまり気にしない。 信頼性を気にするなら、更に自前で別のチェックサムを付けてUDPに載せるといい。
- 506 名前:デフォルトの名無しさん [2007/07/10(火) 19:17:26 ]
- >>503と>>505は釣りかい?
マジなら>>505はもう一度勉強な。 それから、UDPの送信フレーム数そのものに制限は無い。 どこで知ったかしらないが、64kbyteなんて制限はない。 恐らくAPIレベルの話だろう。64kbyte以上送りたければ、何度もAPIを呼べばいい。 受信側が受け取れなければ、単に破棄するだけだ。 それは、受け取り側が糞なんじゃなくて、そういう仕様。 UDPの通信フレームの最大長は、1500オクテット(=バイト)だが、 IP情報分を除くと1480バイトになる。経路が全てイーサネットで 組まれているのなら、APIレベルで1480バイト以下を送れば分割(フラグメント)は起こらない。 インターネットに流すのならもっと小さくする必要がある。 IPヘッダ専用のチェックサムはあるが、それはデータとは無関係。データ自身には何のチェックバイトもない。 イーサネットフレームのCRCはあるが、それは送信時のもので、異なるプロトコルにぶちあたるとコロリととれてしまう。 イーサネットフレームに戻るときにはCRCも戻るが、それは再構築されたものなので、送信時のものとは全く関係ない。 そもそも、UDPは、次の特徴をもっている。 ・>>504が言うとおりIPフレームの到来順序を期待してはいけない。 ・戻されたIPフレームがどの順番に届くかは保証されない。 ・IPフレームの一部が失われた場合、再送の手順は行わない。 ・IPフレームは分割(フラグメント)されるかもしれないが、分割された順序を記憶するフィールドがあり、再構築されるようになっている。 UDPとは、 ・本来、内部LANのように信頼性の高い部分で使用することを前提に策定された ・今は、動画や音声のように、一部が失われても十分機能する場合によく用いる のですよ。ちなみにコレはIPv4の仕様。IPv6はこうとは限らない。
- 507 名前:506 mailto:sage [2007/07/10(火) 19:33:25 ]
- ちょっと訂正
APIで1480バイトを指定するのではなくて、 窓の手でMTUを指定する(Windowsの場合)。 社内LANだけの場合は1500にする。
- 508 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 21:13:41 ]
- このスレで良いのかわからないのですが、質問失礼します。
データ圧縮されたファイルの1文字当りの平均情報量は、テキストファイルのものに比べてどのように変化するんでしょうか? できれば理由も説明してくだされれば幸いです。 よろしくお願いします。
- 509 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 21:26:20 ]
- 圧縮後の情報量なんて、圧縮しているのだから1文字当たりの量は増えているとだけは言える。
どれくらいになるかは圧縮率次第。それがわからないと平均なんてわからない。
- 510 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:05:31 ]
- >>508
それ、学校の宿題か?
- 511 名前:505 mailto:sage [2007/07/10(火) 22:22:05 ]
- >>506
お前こそ勉強し直しだ。 > それから、UDPの送信フレーム数そのものに制限は無い。 用語は正しく。 UDPはメッセージもしくはパケットで数える。フレームとは言わない。 > どこで知ったかしらないが、64kbyteなんて制限はない。 UDPヘッダの長さフィールドが16ビットなので、64kbyte弱が上限。 > 恐らくAPIレベルの話だろう。64kbyte以上送りたければ、何度もAPIを呼べばいい。 複数回に分けてSendToを呼ぶと、複数のUDPパケット=メッセージになってしまう。 UDPは、TCPと違ってストリームではなくメッセージなので、意味が変ってしまう。 > 受信側が受け取れなければ、単に破棄するだけだ。 > それは、受け取り側が糞なんじゃなくて、そういう仕様。 なにその教科書どおりの話は。 世の中には、破棄せず不正なステートに陥ったりバッファオーバーフローしちゃう糞実装があるんだよ。 > UDPの通信フレームの最大長は、1500オクテット(=バイト)だが、 > インターネットに流すのならもっと小さくする必要がある。 んなのはIPよりも下のレイヤの話であって、 フラグメントを禁止したりしなければ、 下のレイヤのために小さくする必要はない。 現実には途中の経路のルーターが、 IPのレイヤで蹴落としてくれることがある。
- 512 名前:505 mailto:sage [2007/07/10(火) 22:30:23 ]
- > IPヘッダ専用のチェックサムはあるが、それはデータとは無関係。データ自身には何のチェックバイトもない。
嘘つき。 UDPパケットにもチェックサムはあって、それにはペイロードも含まれている。 ただし、 チェックサムは実装が必須とはされていないので、 相手がチェックサムを確認しない可能性もあるし、 こちらがチェックサムを付加しない可能性もある。 > ・本来、内部LANのように信頼性の高い部分で使用することを前提に策定された > ・今は、動画や音声のように、一部が失われても十分機能する場合によく用いる なんか違うなぁ。 コストをかけてコネクションを張る必要のないメッセージのやりとり、という用途も考えられていたし、 DNSなんかもUDPを使うんだけどなぁ。
- 513 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:40:45 ]
- コード
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4580.c 入力文 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4581.txt 言語はCです。 コンパイル(gcc)して文をリダイレクトで入力したのですがどうしても一行目で 処理が終わってしまいます。何が問題なんでしょうか?
- 514 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:55:52 ]
- >>513
このスレで何度も言ってることなのだが・・・ デバッガでステップ実行しろ!
- 515 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:57:58 ]
- >>513
1行しか読んでないから fgetsは1回実行されるだけじゃん
- 516 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:02:02 ]
- gccみたいな糞環境だとデバッガ使うのも一苦労でしょ^^
VC2005にきなさいな
- 517 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:03:30 ]
- VC2005でデバッグしてからgccにもってくのもあり
- 518 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:03:50 ]
- gdbの事かー
GUIフロントエンドでも使っとけ
- 519 名前:503 mailto:sage [2007/07/10(火) 23:07:50 ]
- >>505,506
サンクス。勉強になった。 で、再度質問で申し訳ないのですが、 要は、やりたい事が最大で5KBくらいのデータを送りたくて、 UDPについて調べてました。(TCP/IPは困ったことにノウハウが無い) 「IPフレームがどの順番に届くかは保証されない」ってのは 例えば4000byteのメッセージをsendtoすると、 1500byte(これをAとする)、1500byte(これをB)、1000byte(これをC)の フレームに分けられて伝送される。 でも、受信側のアプリケーションでrecvfromした時にバッファに入っているデータが、 A+B+Cの順序で4000byteのこともあれば、B+C+Aの順序になっちゃうこともあるということでしょうか? それとも1回のsendtoと1回のrecvfromだと、 こういうような順序の不都合は起きなかったりするのでしょうか? 自前のコードで1KB以下のメッセージでセグメント化するのは、 コードが煩雑になるのでできるだけ避けたいんですよね。
- 520 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 23:17:16 ]
- >>519
> B+C+Aの順序になっちゃうこともあるということでしょうか? ない。
- 521 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 01:15:34 ]
- そもそも一回のrecvで全部取れる保証が無い。
- 522 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 08:49:29 ]
- >>521
それはTCPの場合ね。
- 523 名前:603 mailto:sage [2007/07/11(水) 09:11:40 ]
- >>505
水を得た魚のようにはしゃいじゃって。UDPヘッダを考慮に入れてなかったんだが、お前の反論はただの荒らしだ。 訂正:UDPヘッダには16ビット分のデータがある。64kbyteが限界 (イーサネット上ではIPパケットが1500バイトになるように分割。) >用語は正しく。 用語は大切だが、ここではそれを議論してんじゃネーだろ。文脈を読めよ。 >> 受信側が受け取れなければ、単に破棄するだけだ。 >なにその教科書どおりの話は。 >世の中には、破棄せず不正なステートに陥ったりバッファオーバーフローしちゃう糞実装があるんだよ。 だーかーらー文脈にそって語れよ。質問者のテスト環境ではWindowsXPって書いてあるだろ。それに、教科書どおりなんて文句言うぐらいなら、用語にケチつけるな。 >> インターネットに流すのならもっと小さくする必要がある。 >フラグメントを禁止したりしなければ、 >下のレイヤのために小さくする必要はない。 下でちゃんと訂正してますー。はしゃぎすぎで良く読んでない証拠だな。 >> ・本来、内部LANのように信頼性の高い部分で使用することを前提に策定された >> ・今は、動画や音声のように、一部が失われても十分機能する場合によく用いる >コストをかけてコネクションを張る必要のないメッセージのやりとり、という用途も考えられていたし、 意図と使い方は違ってても問題ないし、たかだか一つの文句を増やすために引き合いにだしたのか? >DNSなんかもUDPを使うんだけどなぁ。 DNSにUDP?まさに信頼できる接続の典型じゃないか。 お前、どういう形でインターネット使ってるにしろDNS指定されてるだろ? いきなりDNSルートにつなぎに行かないだろ?
- 524 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 10:17:45 ]
- >>523
何も有益な話はないな。
- 525 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 12:01:24 ]
- >>603にプレッシャーがかかりました
- 526 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 16:26:50 ]
- scanfが入力を受け付けてくれなくて困っています。
char c,d; printf("数値いれろ"); scanf("%c",&c); printf("数値入れろ"); scanf("%c",&d); って感じで実行すると 数値入れろ数値入れろ_(←カーソル) 二番目のscanfだけは入力出来る状態です。何が原因なのでしょうか。 OSはWindwosXPでコンパイラはBCC5.5です。
- 527 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 16:37:56 ]
- キーバッファからなんか喰ってるんだろ。
- 528 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 17:42:56 ]
- ファイルから標準入力へリダイレクトすることを考慮に入れず、
人間相手にインタラクティブに入力することだけを考えるなら、 printf("数値いれろ"); という表示をする前に、 すでに入力されているものがあれば、それを全て捨てる処理を入れる。
- 529 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 17:44:21 ]
- 初心者は馬鹿の一つ覚えで
scanf()をfgets()→sscanf()に置換汁
- 530 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 17:44:36 ]
- 毎度おなじみの言葉を言うの忘れてた。
デバッガ上でステップ実行しろ! とりあえず、 1つ目のscanf("%c",&c);でcに何が入ってきているのか、 デバッガ上で確認してみよう。
- 531 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 17:53:41 ]
- >>529
そもそも、初心者向けの教科書の内容が古すぎるんだよな。 scanf系なんか、その存在すら教える必要ないのにな。 自分はscanf系を使ったのは、 C言語やりはじめて最初の一ヶ月くらいで、 その後15年間まったく使っていないよ。 使いもしないものを目に触れさせるだけでも無駄だし、 ましてや、それで新人がハマったりするようでは、有害だよ。
- 532 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 18:03:45 ]
- scanf()も使いどころを知っていれば便利なんだけどね
- 533 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 21:13:36 ]
- >>531
「scanf系」ってなんじゃらほい?
- 534 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 21:16:03 ]
- よくわからんが、sscanf()とかfscanf()とかじゃないの
- 535 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 21:21:18 ]
- 一般的に、scanf()系のその他の関数の方は使い途あるんだけどご本尊が使いようが無くて困る。
- 536 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 21:48:03 ]
- >>535
fscanf()が使えるのならscanf()も使えるでしょ scanf()は単にstdinに対するfscanf()なのだから
- 537 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 21:53:28 ]
- >>536
まぁ確かに、リダイレクトすれば使って使えなくも無いけどキー入力用としては使えないよね。
- 538 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 22:01:43 ]
- >>537
そんなことはないよ。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4496.txt これは以前宿題スレに貼り付けた四則演算が出来るだけのオモチャ電卓だが、 数値を入力する時にscanf()を用いている。getchar()で数値であることを 確認してからungetc()し、改めてscanf()で読んでいるから基本的には安全だ。 scanf()を用いないとすれば実数の入力はずっと面倒になるよ。
- 539 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 22:06:04 ]
- それならfgets()+sscanf()で充分な気が。と思ったが……
あーそうか、入力を放置したまま、部分ごとに解析できるから使いようが無いわけでもないか。
- 540 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 22:08:09 ]
- そこまでするんだったら、fgets+sscanfのほうがすっきりすると思う。
そもそも俺はfscanfも使わないだろ派。 scanf系はsscanfと(使ったことないけど)vsscanfだけあればいい と思っているということも影響しているだろうけど。
- 541 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 22:19:39 ]
- >>540
fgets()だと行長に恣意的な制限が生じるでしょ。 >>538のやり方だとgetchar()とscanf()しか使っていないから そういう制限は無いよ。幾ら長い式でも扱える。 倍精度浮動小数点数を使っている以上、実数のサイズに制限はあるけどね。 他にいくつか例を挙げよう。↓はワードカウンタ #include <stdio.h> int main() { int cnt = 0; while (scanf("%*s") != EOF) ++cnt; printf("%d\n", cnt); return 0; }
|

|