1 名前:デフォルトの名無しさん [2007/02/01(木) 23:08:46 ] このスレは標準Cのみの限定スレです。 まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。 質問する前には最低限検索を。 エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。 C FAQ 日本語訳 www.kouno.jp/home/c_faq/ Cプログラマ必読 ・プログラミング言語C(通称 K&R) www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244 他の過去ログはここに nssearch.hp.infoseek.co.jp/clang/ 前スレ 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130 pc10.2ch.net/test/read.cgi/tech/1159613789/ GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は 専門の別スレッド↓があるのでそこへさようなら。 【初心者歓迎】C/C++室 Ver.34【環境依存OK】 pc10.2ch.net/test/read.cgi/tech/1169039760/ C/C++の宿題を片付けます 82代目 pc10.2ch.net/test/read.cgi/tech/1169575464/
562 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 00:34:16 ] >>560 そのような可変長の配列はC99で採用された仕様だから、 一部のC89信者に蛇蠍の如く忌み嫌われる。 まぁ、C99限定でいいのなら使っていいと思うよ。 但し、スタックサイズに注意すること。
563 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 02:47:44 ] 関係ないけどファイルの行数を数える関数で戻り値使わないでポインタ渡しなのが気持ち悪い・・・
564 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 02:51:17 ] 昔あった、関数は全部voidで宣言しろっていうとんでもないコーディングルールを思い出した
565 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 04:45:24 ] >>564 戻り値を表示できるデバッガが無かったとか?
566 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 08:22:36 ] でも結構しっかりしたC用のAPIだと戻り値はエラー状態を表すのに使われていて、 本来戻り値になるであろうものもポインタの引数になるというのはよく見かける。
567 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 08:33:37 ] MPI とかそんな感じだったような。
568 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 09:41:44 ] 余計 void はありえないなw
569 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 11:30:55 ] 戻り値のチェックを忘れる馬鹿がいるから、とかじゃね?
570 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 11:36:05 ] is〜な問い合わせ関数でも、戻り void でステートをポインタ引数に取るのか… たまんねーコーディング規約だな
571 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 23:25:39 ] >>570 うんにゃ ポインタは渡さない 後はわかるな?
572 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 23:33:04 ] よりよってグローバル変数かよ。
573 名前:572 mailto:sage [2007/06/04(月) 23:33:55 ] "に"が抜けた。 ×よりよってグローバル変数かよ。 ○よりによってグローバル変数かよ。
574 名前:デフォルトの名無しさん mailto:sage [2007/06/04(月) 23:52:32 ] >>572-573 が妙にイラッと来る
575 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 00:02:58 ] ×>>572-573 が妙にイラッと来る ○>>572-573 が妙にムラッと来る
576 名前:560 mailto:sage [2007/06/05(火) 00:03:24 ] >>561 >>562 有難うございます。 色々つっこまれてる。(;゚□゚)
577 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 05:00:17 ] >>571 まあ、N88-BASIC のコードを移植するプロジェクトならアリかもしれんが・・・。
578 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 13:40:27 ] >>572 eax だってグローバル変数だー (i86系)
579 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 13:42:30 ] スマン環境依存スレじゃなかった
580 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 13:42:38 ] >>578 いくらなんでもスレ違い。どっか他所でやってくれ。
581 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 13:53:48 ] レジスタはスレッド切り替わる時に退避されるからスレッドセーフで、 グローバル変数なんかとは格が違う。
582 名前:デフォルトの名無しさん mailto:sage [2007/06/05(火) 14:01:55 ] >>581 >580
583 名前:デフォルトの名無しさん [2007/06/13(水) 23:07:43 ] pc11.2ch.net/test/read.cgi/prog/1175485506/758 char *data = 30000; ↑これに対して↓を行うと gcc -fsyntax-only -x c -std=c99 -pedantic -Wall -Wextra :1: warning: initialization makes pointer from integer without a cast と警告は出るけどエラーにはならない。あれ?と思って規格を見た。 6.7.8 Initialization p11 に "the same type constraints and conversions as for simple assignment apply" とあったので 6.5.16.1 Simple assignment の Constraints を見たけど、 左辺ポインタで右辺が整数というのは認められないように見える。 規格ではエラーになるべきなんじゃないの? ちなみに C++ では思ったとおりエラーになった。
584 名前:デフォルトの名無しさん mailto:sage [2007/06/13(水) 23:09:15 ] 暗黙の・・・
585 名前:デフォルトの名無しさん [2007/06/22(金) 04:01:03 ] ファイルサイズの取得方法って、「ftell」を使用するのが常道なんでしょうか。 Cでファイルサイズを取得する場合、自分は「fgetpos」を使用すのかなーと漠然と考えていて【B】のようなソースを考えていたんですが、 >>402 がファイルサイズの取得方法として「ftell」を利用してるとのことだったので、【A】のようなソースも考えてみました。 やはりAのほうがよいのでしょうか。。。 ======================== 【A】 ======================== long size = 0L; FILE *fp = NULL; fp = fopen( "hogehoge.jpeg", "rb" ); if ( fp == NULL ) { /* エラー処理 */ } else { if ( fseek( fp, 0L, SEEK_END ) != 0 ) { /* エラー処理 */ } else { size = ftell( fp ); if (size == -1L ) { /* エラー処理 */ } if ( fclose( fp ) != 0 ) { /* エラー処理 */ } } } /* sizeの値がhogehoge.jpegのファイルサイズ */
586 名前:585 [2007/06/22(金) 04:01:52 ] で、Bです。 ======================== 【B】 ======================== fpos_t *pos; FILE *fp = NULL; fp = fopen( "hogehoge.jpeg", "rb" ); if ( fp == NULL ) { /* エラー処理 */ } else { if ( fseek( fp, 0L, SEEK_END ) != 0 ) { /* エラー処理 */ } else { if ( fgetpos( fp, &pos ) != 0 ) { /* エラー処理 */ } if ( fclose( fp ) != 0 ) { /* エラー処理 */ } } } /* posの値がhogehoge.jpegのファイルサイズ */ /* fpos_tってキャストできそうだからサイズの値が取れると思ったのですが。。。 */ ========================
587 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 04:02:02 ] 環境依存の方法を使うのが普通じゃないかな。
588 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 04:04:05 ] >>586 全然本質じゃない細かいところで > fpos_t *pos; これは fpos_t pos; だよね。多分わかってはいるとは思うんだけど。
589 名前:デフォルトの名無しさん [2007/06/22(金) 04:14:58 ] fpos_tって別の変数にキャストしたりするとき困らない? fpos_tって環境依存だからlong long型とは限らないと聞いたことがある。
590 名前:デフォルトの名無しさん [2007/06/22(金) 04:19:29 ] 横からすみません。 この>>585 って、もしhogehoge.jpegのファイルサイズが巨大だった場合、 どうなっちゃんですか?
591 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 05:16:26 ] 標準Cでは2GBを超えるファイルのサイズを知る手段はないって結論になる。 fpos_tがキャスト可能であることは保障されていないことだし。 ファイル関連は標準Cだけで書くのを諦めて、64ビット系のstat()相当の関数を使うのが無難じゃない?
592 名前:デフォルトの名無しさん [2007/06/22(金) 06:19:36 ] >>587 〜のみなさん、ありがとうございました(588さんご指摘ありがとうございます)。 ファイルのサイズが大きい場合のことまで頭が回っていませんでした。 標準Cでは難しそうですね。 stat等の機能を持つ関数使用が無難といったところでしょうか。 一応stat使用時のソースも考えてみましたが… struct stat fInfo; if ( stat( "hogehoge.jpeg", fInfo ) != 0 ) { /* エラー処理 */ } else { /* fInfo.st_sizeにファイルサイズが入る */ } あるいは・・・非 POSIX 標準 API インタフェースで(UX上で動作) struct stat64 fInfo; if ( stat64( "hogehoge.jpeg", fInfo ) != 0 ) { /* エラー処理 */ } else { /* fInfo.st_sizeにファイルサイズが入る */ }
593 名前:デフォルトの名無しさん [2007/06/22(金) 07:49:47 ] 相乗り質問ですいませんが ファイルサイズ自体を知りたいのではなくて ファイルサイズがある一定値を超えているか否かを判定したい場合も、 やはりstatなりftellなりでバイトサイズを一度取得してから if文で判定するしかないですよね。 2GBだろうが3GBだろうが、とにかくある値を 超えてるか超えてないかだけわかればいいのですが。。。
594 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 08:16:12 ] ファイル開いたらある値まで無理矢理ファイルポインタ動かしてみて エラーが出るかを拾うってのはどうだろう やっぱ2GB超えちゃうとダメなのかな
595 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 08:36:48 ] そもそもファイルが開けないとサイズが調べられないプログラムはどうかと思うんで、 stat64 なりで調べた方がいいと思うよ。
596 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 08:45:05 ] ていうかPOSIX環境だと_FILE_OFFSET_BITS=64が無ければ 2G以上のサイズはのopen/fopen自体が失敗する。 Windows環境だとopenは出来るけど、seekが出来ない(シーケンシャルには読める)。 それぞれ、open64や_lseek64(bccには無い)を使う。 もちろん、_FILE_OFFSET_BITS=64なら、openだけでよい。 また、statも同様に、_FILE_OFFSET_BITS=64ならstatだけで良いが それ以外はstat64等を使う。
597 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 09:31:14 ] そもそもfseek()はエラーを返せない。
598 名前:デフォルトの名無しさん [2007/06/22(金) 09:54:27 ] stat構造体のst_sizeはoff_t型だから、…… long int型になるのかな、 そうするとlong int型に格納しきれないバイト数のファイルは 桁あふれするのかな? 0? 再現させてテストしたいが 環境が手元にないのだが。。。。。。
599 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 10:00:42 ] だからoff_t型の大きさは_FILE_OFFSET_BITSや_LARGEFILE64_SOURCEによって変わる。 off_tに格納できないようなサイズのファイルは、そもそもstat自体が失敗する。
600 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 10:07:58 ] あ、Windowsだとstatは失敗しないな。たぶん。 で、結果がどうなるかは処理系(ライブラリ)依存。 何故ならstatはエミュレーションしているので、 stat("c:/*", &st)が成功してしまったりする処理系があるから。
601 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 11:44:19 ] ファイルサイズというのが何を意味するかによる。 OS上でのサイズのことなら、 そもそも環境依存なので環境に用意されたAPIを好きなように使えばいい。 Cの入出力関数で読んだときのバイト数のことなら、 読めないようなものは無視してしまえばいい。 まあ、なんでファイルサイズを知りたいのかってとこまで 一回さかのぼって考えてみるのも一計。
602 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 22:25:44 ] サイズは「サイズ」以外ないだろ。 「文字数」とは違う。
603 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 08:17:34 ] 昔のCP/Mはセクタ数でしか管理してなかったなぁ
604 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 08:53:01 ] >>603 今のCP/Mとやらはどう管理しているの?
605 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 09:23:37 ] >>603 最終セクタの0x1Aまでがファイルの「サイズ」だろ?
606 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 09:45:36 ] でもそれは管理されてない。
607 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 09:54:38 ] ん、「管理されているかどうか」という話なの? 「ファイルのサイズとは何か」という話の揚げ足を取ろうとして墓穴を掘っただけじゃなかったの? だったらそれでいいけど。
608 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 09:57:38 ] あっと、 「ファイルのサイズとはOSに管理されていなければならない」という 話の流れとは関係ないことを言いたかっただけで 「ファイルのサイズとは一意に決まるものである」ということに対する反論じゃなかったって事ね。
609 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 10:25:40 ] バイナリファイルは「0x1aまで」というルールを採用できないからセクタ単位でしかサイズを得られない。
610 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 03:19:11 ] ファイルシステムがファイルのサイズをセクタ単位でしか管理してない上に、 テキストとバイナリで終端の扱いが違うようなシステムだって存在してたんだ。 統一した「ファイルサイズを得る方法」なんてあるわけがない。 あー、それから人の書き込みが何でも揚げ足取りに見えるとしたら重症だぞ。
611 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 03:23:51 ] ファイルサイズを取得する関数が標準で用意されなかったのは、 そのあたりが理由なのかな?
612 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 04:03:56 ] >>611 そそ、ファイルシステムという概念も統一できないからディレクトリ操作関係も入れられていないし ファイル操作もストリーム処理系を除くとremove()位しかない。
613 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 04:31:09 ] MS-DOS 1.0 もディレクトリないんだっけ?
614 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 04:43:31 ] 汎用機もねーよ
615 名前:デフォルトの名無しさん [2007/06/24(日) 22:22:42 ] C言語をはじめたばかりであまりわからないのですが、 ビットシフトはなんの役に立つのでしょうか?
616 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 22:24:17 ] そのネタ飽きた
617 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 10:05:04 ] そういや、xmodemプロトコル(無印)もファイルサイズの概念無かったな 128バイトのブロック単位だったからファイルの後ろにはゴミがついていた Mac専用にファイル名やサイズをヘッダにつけるマックバイナリができたっけ・・
618 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 10:55:57 ] マックバイナリができた事情はリソースフォークの管理のためだが詳細はスレ違いにつき割愛。
619 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 11:58:13 ] リソースフォークの話は出してくるやつが出ると思った リソース/データフォークのサイズもファイルサイズの指定の意味で 書いたんだがわからなかったんだろう
620 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 15:09:30 ] >リソース/データフォークのサイズもファイルサイズの指定の意味で >書いたんだがわからなかったんだろう これ日本語なの?
621 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 19:06:14 ] まるでXMODEM対応のためにマックバイナリが作られた様な表現はどうと思う。
622 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 19:07:17 ] どうと思う! いや、どうかと思う、だorz
623 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:39:59 ] MFCでCString型の変数strにメタ文字の.が入っている場合\記号と連結するのに str = "\\" + str; これで全然問題ないのですが、標準のCで char str[MAX_PATH]; strcpy(str, "."); starcat("\\", str); こうするとアクセスバイオレーションが発生します どうしたらええの? strcpy(str, "\.");これでも駄目だった そうそう環境はWinXPSP-2、VC6です
624 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:41:45 ] >>623 starcat なる謎の関数の仕様をよーく確認しろ。
625 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:42:52 ] 星猫
626 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:46:52 ] スマンstrcatだったMSDN見ても問題ないと思うのだが? 文字列の連結するんだよねstrcatって、まぁ今回は連結する方もされる方も一文字だったが
627 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:48:00 ] >>626 じゃぁ strcat の仕様をよーく確認しやがれこのバ
628 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:48:55 ] そりゃ文字列リテラルに文字列を追加しようとしたら落ちるわな。
629 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:50:02 ] それでもstarcatならきっとやってくれるさ
630 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:50:05 ] MFC 使える環境なら CString か std::string 使えば? そっちの方が幸せになれるよ。セキュリティ的にも。
631 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:56:52 ] >>628 ところがどっこいリラテルでなくてもアクセスバイオレーションが起こるんだよねこれがまたww >>630 だからMFCなら全然無問題なのだが、Cの事も知りたいからよ
632 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:56:54 ] >>626 strcatでは、後ろに追加することしか出来ないんだ。 "//"には、後ろにstrを追加する余裕なんて無い。
633 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 14:59:06 ] >>631 ならリテラル以外で問題が再現するコードを書いてみやがれ
634 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:00:41 ] >>631 C は面倒臭いよ。 バッファオーバーフローをいちいち気にしないといけないから。
635 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:04:06 ] sprintf()一回ですむことをstrcpy(), strcat()を駆使しようとするからそうなる。 しかし、やりたいことがよく判らないからサンプルを書けない。 例えばディレクトリとファイル名を連結したいだけならこうなるのだが。 sprintf(path, "%s\\%s", dir, file)
636 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:08:05 ] >>631 どうせ初期化してないのに strcat とかしたんじゃないのか?
637 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:12:33 ] 元のCStringを使ったコードはこうなっていると解釈するぞ。 CString str = "."; str = "\\" + str; char str[MAX_PATH] = "."; size_t size = strlen(str) + 1; if (size >= MAX_PATH) abort(); /*好きにしてくれ*/ memmove(str + 1, str, strlen(str) + 1); str[0] = '\\'; WindowsならTCHAR系使えという気もするが、とりあえずcharにしておいた。
638 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:39:04 ] BoehmGCのようなライブラリを使えば char *str = ".", *tmp; tmp = GC_MALLOC(strlen(str) + strlen("\\") + 1); sprintf(tmp, "\\%s", str); str = tmp; でいいよ んでも毎回strlen()とかすんのはウザいので、 typedef struct string_t { char *s; size_t len; } string_t; とかして、string_tに対する操作を関数で一通り作るといいよ んでもそんなアホくさい作業をするくらいならC++で素直に std::basic_string<>使ったほうがいいよ
639 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 15:53:40 ] MFC使っているならCStringもありさ
640 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 19:19:12 ] strcpy -> strncpy strcat -> strncat sprintf -> snprintf
641 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 20:09:50 ] >>640 残念ながら、前2者は仕様が仕様だから推奨できない。そして最後は未だ標準じゃない。
642 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 21:07:18 ] 結局C++でstd::basic_string<>なりMFCのCStringなりを使えということになる。 何より楽だし。
643 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 22:28:15 ] バッファオーバーフロー脆弱性の話を聞くたびに、 敢えて C を使う以上はエラー処理ちゃんとしろよと思ってしまう。 それができないなら C++ にしる、と。
644 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:19:51 ] >641 C99は未だ存在しないのか・・・
645 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:22:59 ] C99 が使える環境では snprintf を使って、 使えない環境なら等価な関数に #define すればいいんじゃない?
646 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:26:40 ] snprintf()に等価な関数なんてないっしょ。環境によってはあるんだっけ?
647 名前:デフォルトの名無しさん mailto:sage [2007/07/01(日) 23:33:00 ] VC++ には _snprintf がある。
648 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:13:07 ] char *s; FILE *fp = fopen("/dev/null", "w"); size_t len = fprintf(fp, ...); /* 長さを数えてもらう */ fclose(fp); s = malloc(len + 1); sprintf(s, ...); 勿論こんなコードを使うぐらいならapacheあたりのコードをパクるのが良いが それぐらいならやっぱりC++を使うべきという結論に
649 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:38:37 ] >>648 必要なバッファの大きさを求める部分は、関数化して切り出すべきだと思う。 C99ならsnprintf(NULL, でいいし、VCなら_scprintfが使えるし。
650 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:48:37 ] >>649 そいつらの代替実装の話だろ。
651 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 00:48:40 ] 問題は移植性の低さだな 標準とはいえC99未対応のCコンパイラは多い
652 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 01:00:52 ] snprintf 程度なら、C99 に対応してない処理系でも大抵独自に用意されてるんじゃない?
653 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 01:09:55 ] >>652 あってもC99と同じ仕様とは限らん たとえばSingle Unix Specificationだと、たしか返り血が違うんじゃなかったか
654 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 03:06:17 ] その場合は自分でラッパ関数を定義すればいいんじゃないかな?
655 名前:デフォルトの名無しさん mailto:sage [2007/07/02(月) 21:29:01 ] *BSD LIBCあたりから掻っ払って来りゃええやん。
656 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 22:59:02 ] ねぇねぇおまえらちょっと教えてくんない ファイルの行数を取得する標準関数なんてないよね そんなことがしたい時ってやっぱ一旦ファイルを全部読み込んでそん時に\nの数 数えるとかやってんの? どうよ
657 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:03:13 ] そうする
658 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:34:14 ] それ以外の方法があるなら是非とも教えてもらいたいもんだ
659 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:50:13 ] fp = fopen(filePath,"r"); while(fgets(szBuff, MAX_PATH, fp) != NULL) { maxLine++; } fclose(fp); char szItem[7][maxLine++]; じゃぁこれはどうよ、二次元配列が作りたくてこうやったら error C2057: 定数式が必要です、MSDNとか調べてsupport.microsoft.com/kb/142493/ja char szItem[7][((const int)maxLine++]; こうしてもなおんないんだよねぇこれってどうよ
660 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:52:13 ] スマン訂正 int maxLine; 罰char szItem[7][((const int)maxLine++]; 丸char szItem[7][(const int)maxLine++];
661 名前:デフォルトの名無しさん mailto:sage [2007/07/04(水) 23:59:58 ] C99じゃない限り配列の大きさはコンパイル時に固定=定数
662 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:07:53 ] あきらめきれなくて 回避策はないのかと聞いてみる
663 名前:デフォルトの名無しさん [2007/07/05(木) 00:09:15 ] ttp://www23.atwiki.jp/homework/pages/11.html#id_062fdb0f のwikiに載っていたリサージュのプログラムで x = cos(2 * PI * a * t); y = sin(2 * PI * b * t); の2の値を自由に変えられる(自分で入力できる)ように したいんですけど、どうやったらいいですか?
664 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:10:28 ] >>662 malloc使えばいいんじゃない
665 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:12:44 ] >>664 クワシク
666 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:17:10 ] そこらへんの入門書に書いてある。 残念ながらここで1から説明していられるほど簡単に説明できる機能ではない。
667 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 00:53:10 ] >>662 寧ろ、C++でstd::vector使えばいいんじゃない?
668 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 01:32:50 ] ドウシテC99ヲツカワナイノデスカ
669 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 16:48:51 ] ドウシテC99ガフキュウシテルトオモウノデスカ
670 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 16:50:55 ] C99 使うくらいなら C++ 使う
671 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 16:52:17 ] んだな
672 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:13:16 ] 単項演算子の+って、どう言ったときに役に立つのでしょうか? Cだけの話ではないかもしれませんが。
673 名前:デフォルトの名無しさん mailto:age [2007/07/05(木) 23:13:35 ] メジャーなコンパイラでC99に対応してないのってあるの? 俺趣味グラマでgccしか使わんからわからん。
674 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:16:17 ] >>673 VC++
675 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:20:05 ] >>672 桁合わせくらいには役に立つことはあるかも。
676 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 23:47:34 ] >>672 -があるから+も装備したらしい
677 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 00:45:33 ] 昔、 #ifdef xx # define SYM 10 #else # define SYM #endif のような時に int num = SYM +0; というような使い方をした覚えがあるような無いような。
678 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:20:07 ] マクロ関連で役に立つことがたまにありそうではあるな。
679 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:35:03 ] 正確には、式に単項演算子をつけない場合は+を省略したものとみなされる・・・じゃなかったっけ?
680 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 01:36:20 ] 単項+のオペランドも式だし、 単項+のオペランドになれない式もあるだろ。
681 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 03:44:31 ] #ifdef xx # define SYM 10 #else # define SYM 0 #endif では、何故ダメだったのか教えてほしい。
682 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:11:51 ] 学校でC言語実習やったんだがどうしてもわからないことがあったんで聞いてみる。 ○×ゲームを作るプログラムを作っていたんですが。 1〜9の数字キーでどこのマスを使うか決めるプログラムなんです。 line1[10]=" 789\n", line2[10]=" 456\n", line3[10]=" 123\n", という行があるんだが↑このスペース間をTabキー使って開けたらエラーが出たんですが 何故Tabキー使っては駄目なのか教えていただけませんか?
683 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:17:17 ] >>682 書き換える前後で strlen(line1) の数値を比べてみれば分かるんじゃないかな
684 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:37:32 ] いやコンパイルエラーになるんだろ。 たぶん、構文的に駄目になっているのだろうとしか言えない。 後できちんと規格書に当たってみる。 とりあえず、文字列リテラルの中でタブ文字を表現したければ、 タブを直接入力する代わりに\tを使えばいいと言っておく。
685 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:44:18 ] >>683 ほんとにCはかじったばっかりなんでよく分からない上に 今気づいたんだけどスペースに半角使用してしまったため↑の位置が変すぎる('A`) "と7のスペースね。 strlenって言ったら文字列の長さだよね? Tabキーのスペースは普通のスペースの何個分もあるけど1カウント?しかしないという解釈でいいのだろうか?
686 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 22:48:07 ] >>685 やってみたほうがよく分かる
687 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:05:02 ] >>684 指導書に基づいてプログラム作ってるんだ。 基本的に書き換え不可だからそういうことはできないんだ >>686 ほんとに実習でやってるだけだしそんな環境ないんだけど('A`)
688 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:12:54 ] 環境もないのに実習なんて言うのか?
689 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:28:53 ] >>688 ヒント:やるのは学校今は家にいる 学校のPCは勝手に使っちゃいけないんだ。
690 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:30:22 ] じゃぁ学校でやれよ。ここで文句言われてもどうしようもない。
691 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:32:15 ] >>689 今書き込みをしているのが自分の自由に使えるPCからなら、 開発環境をインストールすることを勧める
692 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:36:48 ] >>691 今やってみたがページが真っ白のまま止まってしまう。 ダメみたいだ/(^o^)\
693 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:38:11 ] とりあえずお前はCの勉強する前にPCの勉強をしろ。
694 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:40:29 ] >>692 Windows Vista と予想
695 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:49:11 ] やっぱり聞くんじゃなかったかな。 もう書かないよ。僕のせいで13レスも進んでしまって申し訳ない。
696 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:54:59 ] そりゃあんた、初心者スレなりに行けばいいものをこんなスレに書くからだ。
697 名前:デフォルトの名無しさん mailto:sage [2007/07/09(月) 23:59:16 ] 寿司食いたい
698 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 09:13:41 ] 基本的に書き換え不可なのに、なんでスペースをタブにしようとすんの?
699 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 10:29:56 ] スペースをタブにできるなら、スペースを\tにもできるだろう
700 名前:デフォルトの名無しさん [2007/07/12(木) 10:53:19 ] ファイルがテキストファイルかバイナリーファイルかを Cプログラムで判定したいのだけれど、方法を教えてくれ。
701 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 11:01:37 ] >>700 ファイルの内容を1バイトずつ全て調べて、テキストファイルに通常含まれない コードが含まれているかどうかをチェックするしかない。 ただし fopen() でバイナリモードで開くのを忘れずに。
702 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 11:23:16 ] つ[/usr/bin/file]
703 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 11:33:10 ] 文字データって言ってもいくつかの体系を考慮したら・・・ヘッダとか考えてみたけど それも当てにならんか・・・っつーことで、ちゃんと拡張子を付けい。
704 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 12:26:31 ] >>702 ここをどこだと思ってるんだ
705 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 12:27:18 ] そもそもテキストファイルとは何なのか。
706 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 12:28:40 ] SUBをファイルの終わりとして認識すべきファイルのこと。
707 名前:デフォルトの名無しさん mailto:sage [2007/07/12(木) 15:25:59 ] >>706 CP/M の世界から、ようこそ!
708 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 00:46:50 ] 発注元がどうしても欲しい、というのでフローチャートを書いているのですが #if を if文とフローチャート上で区別する方法はありますか? 具体的には #if defined(MODEL_xx) if (zzz) { processYYY(); } #endif ソフトは MODEL_xx が定義してあるやつとそうでないもの、両方納品します。
709 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 00:58:46 ] 両方納品するんならフローチャートは2セット要るんじゃないか?
710 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 09:42:40 ] >>708 定義してあるかどうかで動作が変わる関数のみ 複数書けばいい希ガス。
711 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 10:21:15 ] if文は実行時に働くものだからフローチャートの一部だが #ifはコンパイル時に働くものだからそもそも異なる実行ファイルができるわけで よってフローチャートもその数だけ必要になる っていうかCの話かこれ?
712 名前:デフォルトの名無しさん [2007/07/13(金) 16:31:31 ] char型のcharってcharacterの略で%nのnはnewlineの略ですよね? こういう略してある語の元の単語が載ってるサイトってないですかね? 探してもこの2つしかわからなくて
713 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 16:36:42 ] 念のために言っとくが\nな 語なんてそんなに多くないから何がわからないか聞けばここで全部答えてもいいぞ(一回にまとめるなら)
714 名前:デフォルトの名無しさん [2007/07/13(金) 18:17:06 ] \nでしたすいません stdioとhの意味 printfのprintとfの意味 scanfのscanとfの意味 int型 int double型 double %f f %c c %s s \t t 全部でこれだけなんですがお願いできますか?stdioはstandard input outputかなとも思うんですが
715 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 18:28:06 ] とおりがかりだけど、 hはheader、fはformat、intはinteger(整数)、doubuleはDouble Precision(倍精度(実数))、 %f はfloat(floating point 浮動小数点)、%c はcharacter、%sはstring、\t はTAB あとは想像通り、辞書ひいてもいいし。 まあ誰かまとめてくれるかな。
716 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 20:07:17 ] printfはprint formatted
717 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 20:26:52 ] stdioはStandard IO(InputOutput)
718 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 20:42:49 ] 714は挙げていないけど、%gはe、fの次の文字だからという理由。 ANSI C言語辞典にはそう書いてある。
719 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 22:22:38 ] >>712 新ANSI C言語辞典って本にたいがい載ってるけど、それだけに買うのはもったいないしな。
720 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 00:13:43 ] 俺あれもってるけど、一度も引いたことないわ manかぐぐればいいだけの話しだしな
721 名前:名無し [2007/07/14(土) 05:10:14 ] hpcgi3.nifty.com/mmgames/patio/patio.cgi? ここの「ファイル入出力」ってやつ分かりません。 助けてください
722 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 05:18:33 ] >>721 初心者スレへどうぞ。
723 名前:デフォルトの名無しさん [2007/07/16(月) 03:14:46 ] (a+1)x^2+(b+1)x+(c+1)=0を 解くプログラムがわからないorz a=1b=1c=1を入れるのだが #include<stdio.h> int main(void) { int a=1,b=1,c=1,d,x,y; scanf("a=%f",&a); scanf("b=%f",&b); scanf("c=%f",&c); d=b^2-4*a*c; if(d>0) x=(-b+sqr(d))/a; y=(-b-sqr(d))/a; printf("x=%d,%d\n",x,y); elxe printf("解なし\n"); return 0; } ではダメみたいなんよ よくわからない、たすけておくれ
724 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 03:37:42 ] マルチすんな
725 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 10:19:32 ] elxe これなに
726 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 10:23:46 ] マルチ先で指摘済み pc11.2ch.net/test/read.cgi/tech/1184003625/
727 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 21:36:40 ] C99で、 for(int i = 0; i < 10; i++) /* something */ ; みたいにforの中で変数宣言できますけど、 while( int i = f() ) /* something */ ; みたいなことはできないんですね。不便。
728 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 22:26:34 ] >>727 C99だとできないんだっけ? その書き方ができるとどこが便利なのかわからないけど
729 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 22:27:05 ] 条件判定のところで変数宣言して何の意味があるんだい?
730 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 22:28:33 ] 判定のたびにブチ壊しては作り直すのであろうよ おほほほ
731 名前:727 mailto:sage [2007/07/16(月) 22:49:06 ] while( obj = nextObj() ) { // something } みたいなことしません?
732 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 22:55:17 ] int obj; while( obj = nextObj() ) { // something } でいいじゃんとか思ったら負け?
733 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 23:03:09 ] >>727 for文の第一節はループ開始前に一回だけ実行される。 だから for(int i=0; … は、ループ開始前に変数iを確保して0に初期化し、 ブロック(forループ)を抜けたら破棄することを意味する。 対してwhile文の条件節は、処理がループするごとに実行される。 もしここに while(int i= … と書いたとしたら、 それは処理の先頭にくるたびにiを宣言するという意味になるが、 まだその時点ではブロックを抜けていないから、 前に宣言したiは有効で、これは文法上エラーとなる。 もし while(static int= … と宣言してうまくいくとしても、 それはおそらく何の利益もない。
734 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 23:04:35 ] for(i=0;i=f();i=0){ とでも書いとけ
735 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 23:08:04 ] そんなにループ内だけで変数を使いたいなら関数にでもしてしまえばよろしい
736 名前:734 mailto:sage [2007/07/16(月) 23:10:44 ] まちがったが訂正はしない わかって おねがい
737 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 23:15:49 ] { int obj; while( obj = nextObj() ) { // something } } みたいにブロックで囲めばいいじゃん。
738 名前:デフォルトの名無しさん mailto:sage [2007/07/16(月) 23:25:36 ] つーか for (int obj; obj = nextObj(); ) { // something; } でおk
739 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 08:18:31 ] はんのーした香具師らは負け組
740 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 10:40:12 ] >>733 >それは処理の先頭にくるたびにiを宣言するという意味になるが ブロック先頭での宣言と同様に扱えばいいわけですが 規格ではそうはしなかった、ってだけの話では?
741 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 15:04:07 ] >>740 そもそもそんな話じゃない。 規格では while に書いたステートメントは値を返さないといけないが、 int i = ... のような変数の宣言は値を返さないので書けないだけの事。
742 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 15:10:43 ] >>741 > while に書いたステートメント > 変数の宣言は値を返さない 現行の規格の話するんなら正確にな。 文法的に while の条件に文は書けない。 式だけ。そして文には値とかないから。
743 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 16:31:46 ] なんというマジレスの嵐
744 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 17:23:12 ] for (;int i = hoge();)
745 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 17:32:03 ] 寿司食いたい
746 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 17:35:08 ] >>745 ガリでも食ってろ
747 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 18:50:31 ] C++でできるんだから、C99でできるようにすることも可能だったとは思う。 どういう経緯があったかは知らないが、結果として制定されたC99では、 できるようになっていないけど。 以下チラシの裏 これは、こういうコード Tok* ct; if (ct = gettok()) { /* ... */ } に対して、条件式のところで変数を宣言できれば、未初期化の変数を減らせ、 ついでに条件文内に変数の有効範囲を閉じ込められるというアイデアだった。 if (Tok* ct = gettok()) { // ctはスコープ内 } // ctはスコープ外 参考『C++の設計と進化』 3.11.5.2 条件文の中の宣言 C++では、C以上に初期化と代入が区別されるので、 >>737-738 のような書き換えができないこともある。 それもあって、俺はたまに使うし、C++からは無くなれと思わない。
748 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 19:06:31 ] この文でコンパイルできるんだが結果が正しくでません。 どこか誤りありますか? #include<stdio.h> void main() { int a, b,c; printf("a = "); scanf("%d",&a); printf("b = "); scanf("%d",&b); printf("c = "); scanf("%d",&c); if( a == b == c ){ printf("%d\n",a); }else if( a >= b >= c ){ printf("%d\n",a); }else if( a >= c >= b ){ printf("%d\n",a); }else if( b >= a >= c ){ printf("%d\n",b); }else if( b >= c >= a ){ printf("%d\n",b); }else if( c >= a >= b ){ printf("%d\n",c); }else if( c >= b >= a ){ printf("%d\n",c); } }
749 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 19:14:43 ] >>748 「何をやろうとしているのか、また何が正しいのかは コードから読みやがれ」ってか。大した奴だ。 …とか思ってたら、ひと目で変な記述が。 >if( a == b == c ){ >if( a >= b >= c ){ :(略) そんな書き方できない。 面倒でも if (a == b && b == c) { if (a >= b && b >= c) { :(略) と書かないと。
750 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 19:16:46 ] >>749 スマソ。そしてありがとう。 そうやったら、できました。
751 名前:c言語初心者 [2007/07/17(火) 19:38:16 ] 突然すいません!!学校の問題でc言語の問題が3つ出たのですがまったくわからないです。問題書き込むんで誰か解いてもらえませんか? よろしくお願いします。
752 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 19:40:08 ] OKとりあえず宿題スレ逝け。
753 名前:c言語初心者 [2007/07/17(火) 19:43:22 ] 宿題すれってあるんですか??
754 名前:デフォルトの名無しさん [2007/07/17(火) 19:45:11 ] C言語なら俺に聞け(入門篇) Part 16 pc11.2ch.net/test/read.cgi/tech/1184003625/
755 名前:c言語初心者 [2007/07/17(火) 19:50:54 ] ここならしていただけるんですか??
756 名前:デフォルトの名無しさん [2007/07/17(火) 19:53:03 ] >>755 >>751 > 学校の問題 C/C++の宿題を片付けます 93代目 pc11.2ch.net/test/read.cgi/tech/1184506311/
757 名前:デフォルトの名無しさん mailto:sage [2007/07/17(火) 19:55:22 ] ただし回答者の気が向いたら 気に入られなければスルーされる
758 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 05:49:19 ] スレ立てられなかった。誰かキボン。 スレタイ: 【初心者歓迎】C/C++室 Ver.40【環境依存OK】 エスケープシーケンスやWin32APIなどの環境依存な物でもOK。 ただしその場合、質問者は必ず、環境を書きましょう。 age 推奨ですが、自己判断で。 ◆ 前スレ: 【初心者歓迎】C/C++室 Ver.39【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1182740506/ ◆ アップローダー (質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
759 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 11:05:17 ] >>758 何故このスレで……
760 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 13:58:47 ] もう立ってるね
761 名前:デフォルトの名無しさん [2007/07/19(木) 01:02:10 ] cの入門書とポインタ攻略本を読んでほぼ理解できたんだけど次に何読めばいいかわからん 何かお勧めの参考書教えてください
762 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 01:05:40 ] アルゴリズムとデータ構造
763 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 01:10:14 ] 30日でできる! OS自作入門
764 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 01:13:03 ] K&R
765 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 01:41:38 ] アルゴリズム辞典
766 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 10:10:47 ] >>761 >読んでほぼ理解できたんだけど 本当なら大したもんだけど、 >cの も少しケースセンシティブになろうね。
767 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 21:12:03 ] ケースセンシティブにもう少しもないものだ
768 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 01:15:22 ] たしかにw まぁ、ポインタは理解したんだろう。 面倒なのはポインタよりも、ポインタの絡んだ型宣言の方だから。
769 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 01:38:29 ] えーとintの配列へのポインタを受け取って関数へのポインタへのポインタを返す関数・・・
770 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 11:12:34 ] typedef って便利だよな。
771 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 13:33:33 ] 俺は、typedef void (*func)(int)っていうのを見て 何をtypedefしてんだ?と思った時期もありました。
772 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 16:53:23 ] void (*const *foo(const int (*p)[10]))(void (T::*)(int (U::*)()));
773 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 17:03:50 ] typedef様様だな
774 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 17:16:19 ] >>771 それ何をtypedefしてるの? 初めて見た
775 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 17:29:32 ] >>774 intの引数が1つで値を返さない関数を func にtypedef 例えば、、、 void foo(int); func f = foo; とか
776 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 17:38:57 ] なるほどー 自分に使う機会が来るかはわからんけど覚えておこう thx
777 名前:デフォルトの名無しさん [2007/07/20(金) 18:12:25 ] C言語をはじめたばかりであまりわからないのですが、 ビットシフトはなんの役に立つのでしょうか?
778 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 18:13:29 ] typedef int (U::*FP1)(); typedef void (T::*FP2)(FP1); typedef void (*FP3)(FP2); const FP3* foo(const int p[][10]);
779 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:18:26 ] >>777 ビットフラグのクリアとか?
780 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:45:24 ] >>777 ビットの配列を作るときに使う
781 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 20:45:55 ] 「作る」じゃなくて「操作する」だな。すまん。
782 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 21:50:27 ] >>779-781 ビットシフトはなんの役に立つのでしょうか? でぐぐれ
783 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 21:56:19 ] そういえばどうしてローテートはないんだろ
784 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 22:20:58 ] >>777 コレ見るの、3回目か4回目くらいなんだけど、ギャグかなんかなの?
785 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 23:02:06 ] 不定期テンプレ
786 名前:デフォルトの名無しさん mailto:sage [2007/07/20(金) 23:14:02 ] ただの荒らし あるいは風物詩 あるいは新参の受ける洗礼
787 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 00:56:47 ] >>783 ローテートをサポートしない CPU も多いんじゃね? 知らんけど。
788 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 01:07:00 ] >>784 少ないなw
789 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 02:04:14 ] &a->bって&(a->b)か(&a)->bかどっち?
790 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 02:09:29 ] 「演算子 順位」とかでぐぐれ
791 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 02:19:04 ] &(a->b)ですね。ありがとう。
792 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 02:25:36 ] つか、やってみりゃ分かるだろ。
793 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 02:39:22 ] その態度は良くない。 ・規格を読んで正しい挙動を把握する ・実際に処理系で実験してみる ・結果が規格と異なった場合パッチを書いてしかるべき所に送りつける(オプション)
794 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 03:25:22 ] 規格読んで来て、理解して&(a->b)を常に&a->bとか書くように なる人と仕事組んだら俺泣きそうw
795 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 04:28:59 ] &a->b は普通に書くだろw
796 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 04:41:50 ] >・規格を読んで正しい挙動を把握する =「演算子 順位」とかでぐぐれ >・実際に処理系で実験してみる =つか、やってみりゃ分かるだろ。
797 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 04:45:12 ] 正しい挙動を把握してから実験で確認するのと、 実験して結果を見て予想するのは、大きな違いがある。
798 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 05:26:51 ] その態度はよくない。 実験して結果を見て法則を導くスタイルが無いと。
799 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 05:30:11 ] はいはい、そうですね
800 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 05:48:50 ] 実験した後に確かめた方がいい。
801 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 10:00:56 ] 演算子の優先順位は、処理系依存ってことはないだろうから、実験でいいんじゃね?
802 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 10:02:37 ] 規格読む→実験する→2chで煽りつつ確かめる
803 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 10:11:19 ] 規格読む前に実験した方が実感しやすいな。
804 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 10:36:58 ] その通りだ。実験して、壁にぶち当たって、その壁をぶっ壊せ! フラグメンテーションエラーで、メモリーもぶっ壊せ! そして泣きながら規格読んで実感だ!
805 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 11:26:38 ] >>804 >そして泣きながら規格読んで実感だ! お疲れ様です。
806 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 11:51:31 ] C++ だが、export は色んな意味で泣ける。
807 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 12:27:13 ] 俺の胸でなけ
808 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 13:02:06 ] 俺の下であがけ
809 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 14:42:57 ] 実験だけじゃ優先順位なのか結合の方向なのか解らない、と。 まぁ、&a->bくらいなら、どっちでもいいけど。
810 名前:デフォルトの名無しさん mailto:sage [2007/07/21(土) 16:25:12 ] &a->b が (&a)->b と見做されるんだとしたら 皆 a.b と書くと思うんだわ。
811 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 00:30:44 ] &a.bじゃないか?
812 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 00:31:41 ] 終電まで仕事してて疲れてた。>>811 はお願いだから忘れて
813 名前:デフォルトの名無しさん mailto:sage [2007/07/22(日) 10:05:19 ] CD-R に保存しました
814 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 03:59:19 ] 石版に刻みました
815 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 09:46:04 ] DNAに移植しました
816 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 10:10:45 ] アカシックレコードに刻まれました。
817 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:15:00 ] C++ の STL に感動しました C言語で STL に似たことをしたいと思ったらどうすれば良いですか?
818 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:16:19 ] C++に乗り換える。
819 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:17:24 ] やっぱりそれが確実ですよね
820 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:20:58 ] マクロを使う。
821 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 02:11:51 ] そういえば、templateが使えない時代にはgeneric.hってのがあったな
822 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 21:08:58 ] >>817 こんなんあった。かなりSTLに近いんじゃないか? マクロを使ってるからデバッグがむずかしそうだが >sourceforge.jp/projects/cstl >CSTLは、C言語で使えるC++のSTLライクなコンテナライブラリです。 >vector, deque, list, set, multiset, map, multimap, stringを提供します。
823 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 10:16:24 ] FILE *t=tmpfile(); で作成したtを fclose(t); してもいいですか? なんか危なくて、こわいです。
824 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 10:24:04 ] なんで危ないんだよw まあ、またその内容を使うことがあるなら閉じちゃだめだが。
825 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 10:44:31 ] ええ! fclose(t)ってやってよかったの?
826 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 10:56:00 ] C言語辞典見てみたけど、やっていいみたい。
827 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 11:09:09 ] 用がなくなったら閉じないとダメだろ。常考。
828 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 11:52:56 ] tmpfile()は、そのファイルがクローズされたか、またはプログラムが終了したときに 自動的に削除されるファイルを生成し、そのストリームへのポインタを返す。 何も問題はない。
829 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 06:35:21 ] 自分ならOOライクにたとえ1行で済んだとしても生成と破棄を対にして両方の関数を作る
830 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 07:59:09 ] なら別にC使わないで他のOO使えばいいじゃん。頭かたいね。
831 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 08:38:00 ] 生成と破棄を対にすることがOOライクだと思うくらいならそれでもいいんじゃね?
832 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 09:21:23 ] ぷっ
833 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 11:09:16 ] >>830 固いんじゃなく、弱いんだろう。
834 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 23:43:24 ] >>822 面白そうなものがあるんですね GPLじゃないところもイイ! ただ、著作表示だけはしないといけないようですね
835 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 00:29:40 ] >>834 BSDライセンスらしいから緩いでしょ
836 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 00:34:52 ] いや修正BSDって中のファイルに書いてるじゃん
837 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:02:02 ] ////(main.h) #ifndef MAIN_H #define MAIN_H int X #endif //// ////(main.cpp) #include "main.h" #include "move.cpp" main(){ move(); } //// ////(move.cpp) #include "main.h" move(){ (Xを操作する処理) } //// ゲームプログラミングを勉強中で、大筋で感じな状況になってます。 これをコンパイルすることも実行することもできるのですが BCCでコンパイルすると、「パブリックモジュール_Xが、main.objとmove.objの 両方で定義されている」と警告されます。 これはどういうことで何が悪いのでしょうか? グローバル関数を使いながら、ファイルを分割してみたいのですがどうしたらいいのでしょうか?
838 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:03:42 ] >>837 ////(main.cpp) #include "main.h" #include "move.cpp"←いらなくね?
839 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:06:54 ] int X; ~
840 名前:837 mailto:sage [2007/08/05(日) 18:15:40 ] >>838 それを消したら、未定義の関数moveを呼び出したなどとエラーだ出ます。 >>839 掲示板に書き込む時に簡略化したら忘れてしまいました。
841 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:21:04 ] >>837 宣言と定義の区別をしっかりと。ヘッダには変数や関数の宣言だけ置くこと。
842 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:23:31 ] プロトタイプ宣言でググれ
843 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:04:20 ] ////(main.h) #ifndef MAIN_H #define MAIN_H extern int X; #endif //// ////(main.cpp) #include "main.h" #include "move.h" int main(){ move(); } //// ////(move.h) #ifndef MOVE_H #define MOVE_H int move(); #endif //// ////(move.cpp) #include "main.h" int move(){ (Xを操作する処理) } ////
844 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:05:03 ] まちがった ////(main.cpp) #include "main.h" #include "move.h" int X; int main(){ move(); } ////
845 名前:わ ◆V92eIRyEPU mailto:sage [2007/08/14(火) 14:48:11 ] ね
846 名前:拿 ◆J/ZoJAt3T2 mailto:sage [2007/08/14(火) 14:50:07 ] テスト
847 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 23:58:55 ] >>843-844 俺なら、 extern int X; はmove.h側に入れて、int X; は move.cpp に入れて、 main.hは消すかな。細かいことですんませんね。 >>837 安心しなさい。あなたの方が、うちの元請けより優秀です! ちゃんと #ifndef使うあたりが。
848 名前:名無しさん@お腹いっぱい mailto:sage [2007/08/19(日) 03:09:14 ] すいません最近c言語を習い始めたのですが、円の半径(double型)をあたえて、円周の長さと と円の面積を表示するプログラムがどうしてもできません。 どうすればよいのでしょうか?
849 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 03:47:30 ] お前さんが書いたコードを晒せ
850 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 04:10:29 ] その前に初心者スレに行け。
851 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 10:50:59 ] >>848 が出来ない可能性 ・scanfで&忘れ、%dを指定している ・式中にint型とかを使っている ・まともに調べてない、読んでない ・円周の長さ、円の面積が分からない
852 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 10:57:20 ] #define PI 3
853 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:33:21 ] ゆとりな定義だな
854 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:39:38 ] #define ENSYUURITSU 3
855 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 18:23:29 ] >>848 どぞ。 double pi = 3.14159265358979323846 double r = 1.0; double s = pi * r * r; double d = 2 * pi * r; printf("s=%f,d=%f\n",s,d);
856 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:58:27 ] どうでもいいが円周はlな方がしっくりくる
857 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 21:16:49 ] #include <math.h> double pi = atan(1) * 4;
858 名前:名無しさん@お腹いっぱい mailto:sage [2007/08/20(月) 02:27:48 ] >857 ありがとうございます。あと家でc言語使えるようにしようと思って microsoft.net Framework version 2.0 再頒布可能パッケージ microsoft.net Framework version 2.0 SDK 日本語版 をダウンロードしたのですが友達の話によると microsoft.net Framework version 2.0 日本語版 language pack が必要らしいのですがmicrosoftの公式サイトに行っても見つからないのですが どうやったら手に入るのでしょうか? すごい初歩的な質問ですいません。
859 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 05:52:55 ] >>858 初歩的以前にスレ違いなんだが自覚あるか?
860 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:16:00 ] math.hインクルードするならM_PI使ったほうが早い
861 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:20:12 ] >>860 M_PIは標準ではない。
862 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:45:41 ] ここは世界レベルでの標準に関わる内容のスレです。標準的ではない手法はお断りします。
863 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 10:10:12 ] M_PIが無い最近の環境って何がある?
864 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 10:18:59 ] つ MS Visual C++
865 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 10:28:00 ] gccでもansi適合モードにするとスルーされる。
866 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 13:43:09 ] VC++は定義されてないのがデフォで、_USE_MATH_DEFINESを定義すると使えるようだね
867 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 14:00:16 ] 関数から構造体を受けることはできたんですが,構造体を渡して,受け取る関数を作りたいのですが どのように記述すれば良いですか struct Initset getinfo(struct Initset *syoki2) ↑のような記述はできないですか?
868 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 14:07:52 ] それでいいです
869 名前:867 mailto:sage [2007/08/24(金) 15:10:45 ] >>868 できました〜。ありがとうございます
870 名前:名無しさん@お腹いっぱい mailto:sage [2007/08/24(金) 16:41:08 ] 入力した自然数nの正の約数をすべて表示するプログラムを今、作っているのですが、 int main(void) { int a = 1; int n = 500; int f = n / a; while(a < n) { a += 1; } printf("%d\n",f); return 0; } 上のものは自分がわからないながらも作ったものです。 でもできませんでした。 改善点お願いします。
871 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 16:52:01 ] while(a < n) { と a += 1; の間に if (n % a == 0) { printf("%d\n", a); } とか入れてみ まあ約数なら 1/2 以上はありえないから省くとかするけどな。 入力とかはとりあえずscanfかなんかで。
872 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 16:57:44 ] >>870 まず処理の流れ自体がわかってないだろう もう一回教科書を読み直せ
873 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 23:19:39 ] 入力した自然数nの正の約数をすべて表示するプログラムを今、作っているのですが、 int main(void) { int a = 1; int n = 500; int f = n / a; while(a < n) { a += 1; } printf("%d\n",f); return 0; } 上のものは自分がわからないながらも作ったものです。 でもできませんでした。 改善点お願いします。
874 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 23:30:37 ] 改善というか、まずプログラムを使わずに 正の約数を全て列挙する方法すら分かってないように思える。 プログラム以前の問題。
875 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:30:50 ] どういう順番での実行を予想してるんだ?
876 名前:名無しさん@お腹いっぱい mailto:sage [2007/08/25(土) 00:41:32 ] 870ですが約数をすべて列挙する方法ってnまでの数ですべて割る条件式つくって それが成立するやつを表示するプログラムでよいのですか?
877 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:09:54 ] よくない
878 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:12:07 ] 「nまで」がどこからnまでなのか、まら「まで」とは未満なのか以下なのか 「全て割る条件式」とは何のことなのか 本当にわかってるか?
879 名前:名無しさん@お腹いっぱい mailto:sage [2007/08/25(土) 01:18:28 ] すいません。たとえば500だったら1,2,3,4,5,6,7,8、という風に して割り切れる、割り切れないのif文を作ればよいのかと思ったのですがそれではだめですか?
880 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:22:00 ] >>879 そこまではいい 問題は「割り切れる」の意味がわかってるかどうかだ
881 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:22:31 ] 自然数nの正の約数を列挙する ↓ 自然数nを割り切れる正の整数を列挙する ↓ 自然数nを割り切れる可能性のある正の整数すべてについて、 その数で本当に割り切れるかどうかを調べ、 割り切れるときはその数を画面に表示する 一応言っとくが「割り切れる」とは除算して余りが出ないことだからな
882 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:24:00 ] とりあえず「nをaで割り切れるならば」を意味するif文を書いてみろ
883 名前:名無しさん@お腹いっぱい mailto:sage [2007/08/25(土) 01:26:01 ] ありがとうございます。実は今もう一個悩んでいるのがあってかけ算の九九の表をつくるというプログラムをやっているのですが 自分なりにつくったのは /* kuku.c */ int main(void) { int a, b; int n = 9; for(a = 1; a <= n; a = a + 1 ){ for(b = 1; b<=n; b = b + 1 ){ printf("%d\n",a*b); } printf("\n"); } return 0; } なのですが表になりません。おとといから始めたばかりなのでちんぷんかんぷんです。 いろいろとすいませんがご指導をお願いします。
884 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:28:22 ] 一 個 ず つ や れ
885 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:32:20 ] >883 初心者スレ逝け
886 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:35:55 ] >>883 printf("%d\n",a*b); → printf("%3d",a*b); がんばれ!
887 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:37:43 ] >>883 処理の流れ、つまり「まずこれが起きて、次にこれが起きて……」という順番をたどりながら考えろ。 漠然と書いて走らせて出来なかったーわかんないーじゃいつまでも理解できん。 そしてここは基本的に「ある程度Cがわかってる人」が「標準C」というものについて少しつっこんだ質問をする場所だから まずは初心者スレへ行くことをお勧めする。
888 名前:名無しさん@お腹いっぱい mailto:sage [2007/08/25(土) 01:45:23 ] >886 ありがとうございます。できました。
889 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 11:17:58 ] なんだよ>>871 は無視かよ
890 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:49:26 ] だって約数はその数自身も含まれるから ありえないなんて事はありえませんもん
891 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 13:24:42 ] まあ順番を問わなければもっと速いが if(!n%a){ if(n/a < a)break; printf("%d\n",a); if(n/a != a)printf("%d\n",n/a) }
892 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 01:28:44 ] !
893 名前:デフォルトの名無しさん [2007/09/03(月) 18:47:21 ] bool a,b,c,d,e,f; とか int a,b,c,d,e,f; みたいに並べて書いた変数を一気に同じ値で初期化する書き方ってありますか? あったら教えてください。
894 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 18:55:12 ] a = b = c = d = e = f = 0;
895 名前:デフォルトの名無しさん [2007/09/03(月) 18:57:51 ] >>894 宣言と合わせて一行でかけませんか。
896 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 18:58:05 ] >>893 static int a,b,c,d,e,f; これで全部0で初期化される。 struct foo { int a,b,c,d,e,f; } foo = {0}; これでも全部0で初期化されるな。 まぁ、横着するなってことだ。
897 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 18:59:10 ] int a,b,c,d,e,f;a = b = c = d = e = f = 0;
898 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 19:25:37 ] >>897 ワロタ
899 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 19:29:01 ] それほど面白くはない
900 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 19:59:10 ] >>898 そんなので笑えるなんて君の人生楽しそうでうらやましいわ
901 名前:デフォルトの名無しさん mailto:sage [2007/09/03(月) 20:07:29 ] >>893 同じ値で初期化するような変数なら同じような扱いをするんだろう 配列で宣言しろ
902 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 16:40:24 ] 過疎ってますね ビットシフトでも入れてみますか?
903 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 16:52:28 ] 聞くことがないならそれでよし わざわざ増やさんでいいw
904 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:00:56 ] ビットシフト入れたかったのに・・・
905 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 17:24:08 ] じゃビットシフト絡みで MMXの様に、4Byteの整数型を1Byte単位で飽和演算する方法を 昔どこかで見た気がするんだけど、どうやるんだっけ 0xFEFEFEFE に 各バイトに3を加算 ↓ 0xFFFFFFFF 画像処理に使おうと思ったけど思い出せない
906 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:51:57 ] MMX対応のプロセッサを使う。
907 名前:905 mailto:sage [2007/09/06(木) 21:56:42 ] あった www.emit.jp/prog/prog_b.html しかし原理がよくわかんね
908 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 21:58:04 ] if文を任意の位置でぬけるbreakとかcontinueみたいな 命令ってないですか?
909 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:00:49 ] >>908 こんなイメージ? if (...) { ...; if (...) ifBreak; ...; } これくらいしか手がない気が。 if (...) { ...; if (...) goto endIf; ...; } endIf:
910 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:01:58 ] goto
911 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:15:29 ] >>909-910 サンクス
912 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 22:38:47 ] do { if(...) { } else if(...) { .... break; } } while(0) とか
913 名前:デフォルトの名無しさん mailto:sage [2007/09/06(木) 23:43:12 ] 俺がよく使うのは if(...){ do{ ... if(...) break; ... }while(0); }
914 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:12:33 ] 何その隠れgoto
915 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:51:35 ] んな隠れgoto使うくらいなら、素直にgotoで書いた方が未だ見やすい希ガス。 そもそも、ロジックを整理すべきじゃないかとは思うが。
916 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 00:54:57 ] if (...){ ... if(!...){ ... } } でいいんじゃないの?
917 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 01:11:34 ] int i; scanf("%d",&i); while( i<1 || i>9999 ) { printf("もう一度入力してください"); scanf("%d",&i); } iに数字じゃなく、aaaaなどの文字列を入れると”もう一度入力〜”がえんえんループ表示されてしまいます。 これを防ぐにはどうしたらいいのでしょうか?
918 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 01:14:43 ] >>917 ja.wikipedia.org/wiki/Scanf#.E7.95.B0.E5.B8.B8.E3.81.AA.E5.85.A5.E5.8A.9B.E3.81.8C.E8.A1.8C.E3.82.8F.E3.82.8C.E3.81.9F.E6.99.82.E3.81.AE.E5.87.A6.E7.90.86
919 名前:917 [2007/09/07(金) 01:23:41 ] >>918 ありがとうございます!
920 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 01:26:09 ] >>918 その方法もどうかと思うな。 scanf()は行単位の処理じゃないのに、バッファクリアだけ行単位になってしまう。
921 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 01:34:26 ] それではどうすればいいかってのは、このスレでガイシュツです。
922 名前:デフォルトの名無しさん [2007/09/07(金) 10:37:17 ] typedef struct _st { char ** ppsz; } st; void freeif(st* pst) { for(int i = 0; i < 3; i++) { for(int j = 0; j < 2; j++) { if(*pst->ppsz != NULL) { free((void*)pst[i].ppsz[j]); } } } for(int i = 0; i < 3; i++) { if(pst->ppsz != NULL) { free((void*)pst[i].ppsz); } } if(pst != NULL) { free(pst); } return; }
923 名前:デフォルトの名無しさん [2007/09/07(金) 10:38:36 ] int main(void) { st* pst; // make struct object pst = (st*)malloc(3); if(pst == NULL) { printf("st is null\n"); } else { for(int i = 0; i < 3; i++) { // make struct member pst[i].ppsz = (char**)malloc(2); for(int j = 0; j < 2; j++) { // make member area pst[i].ppsz[j] = (char*)malloc(10); } } // free memory freeif(pst); } return 0; }
924 名前:デフォルトの名無しさん [2007/09/07(金) 10:40:37 ] メモリの解放が上手くいきません。よろしくお願いします。 (正誤) if(pst->ppsz != NULL) { ← × if(pst[i].ppsz != NULL) { ← ○
925 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 11:03:01 ] >>923 typedef struct _st { char ** ppsz; } st; static const char STRINGS[3][2][11] = { { "idx1:data1", "idx1:data2", }, { "idx2:data1", "idx2:data2", }, { "idx3:data1", "idx3:data2", }, }; void freeif(st* pst) { for(int i = 0; i < 3; i++) { for(int j = 0; j < 2; j++) { if(pst[i].ppsz[j] != NULL) { printf("pst[%d].ppsz[%d]:FREE\n", i, j); free((void*)pst[i].ppsz[j]); } } } for(int i = 0; i < 3; i++) { if(pst[i].ppsz != NULL) { printf("pst[%d].ppsz:FREE\n", i); free((void*)pst[i].ppsz); } } if(pst != NULL) { printf("pst:FREE\n"); free(pst); } return; }
926 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 11:03:55 ] int main(void) { st* pst; // make struct object pst = (st*)malloc(3 * sizeof(st)); if(pst == NULL) { printf("st is null\n"); } else { for(int i = 0; i < 3; i++) { // make struct member pst[i].ppsz = (char**)malloc(2 * sizeof(char*)); for(int j = 0; j < 2; j++) { // make member area pst[i].ppsz[j] = (char*)malloc(11 * sizeof(char)); lstrcpy(pst[i].ppsz[j], STRINGS[i][j]); } } // debug printf("---------------------\n"); for(int i = 0; i < 3; i++) { for(int j = 0; j < 2; j++) { printf("pst[%d].ppsz[%d] >> %s\n", i, j, pst[i].ppsz[j]); } } printf("---------------------\n"); // free memory freeif(pst); } _getch(); return 0; }
927 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 11:31:28 ] >>922-924 固定サイズなら無理にmalloc()/free()を使う必要はないと思うぞ。 typedef struct _st { char ppsz[2][10]; } st; でいいやん。
928 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 11:36:05 ] メモリ動的確保/解放の練習とかじゃない?>>927
929 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 22:08:23 ] C89 の規格票ってどこかで見れない?
930 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 22:38:18 ] 過去ログにURLが転がってたような。 印刷できないPDFでよければJISCのサイトで閲覧できる
931 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 23:14:17 ] JISCって過去の規格票まで見れたっけ? 現在有効のX3010:2003はC99相当だけど。
932 名前:デフォルトの名無しさん mailto:sage [2007/09/11(火) 23:19:57 ] 最新版以外はなかったことになるから。 ふつーはそれでも問題ないんだよ。非互換な改訂しなければ。 JIS漢字とかJIS漢字とかJIS漢字とか、あとJIS漢字とか
933 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 00:31:37 ] そうなんだよな。それにJIS漢字も追加で。
934 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 00:53:09 ] おいおい、JIS漢字を忘れちゃいないか?
935 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 01:01:56 ] 規格票
936 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 01:15:46 ] 無粋なヤツだな
937 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 02:38:12 ] 無粋
938 名前:デフォルトの名無しさん [2007/09/12(水) 03:48:23 ] 今日学校でプロトタイプ宣言に関する問題を習ったんですが 問題:再帰関数を使って、Xのn乗を求めるプログラムを作成しなさい プロトタイプ宣言:int Power(int x,int n); 実行画面 文字列入力==>2 文字列入力==>0 値:1 文字列入力==>2 文字列入力==>3 値:8 文字列入力==>6 文字列入力==>4 値:1296 この問題だけどうしても判らなくて困っています^^; 何方かわかる方がいましたら教えてください
939 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 04:00:01 ] >>938 int Power(int x,int n) { int i; int sum = 1; if(n == 0) return 1; else{ for(i = n; i > 0; i--) sum *= x; } return sum; }
940 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 04:04:51 ] 再帰じゃないじゃん
941 名前:939 mailto:sage [2007/09/12(水) 04:06:40 ] あ、再帰だったんだ、出直してくる。
942 名前:939 mailto:sage [2007/09/12(水) 04:16:22 ] 再帰版 int Power(int x,int n) { if(n == 0) return 1; else return x*Power(x,n-1); }
943 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 04:21:11 ] int Power(int x, int n) { if(x == 0 && n == 0) exit(1); if(n < 0) return 0; if(n == 0) return 1; return Power(x, n - 1) * x; }
944 名前:デフォルトの名無しさん mailto:sage [2007/09/12(水) 06:51:52 ] static int power(int x, int n, int v) { if (n < 0) return 0; if (n == 0) return v; return power(x, n - 1, x * v); } int Power(int x, int n) {return power(x, n, 1);} これで末尾再帰で最適化が利いてループになるはず。
945 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 09:13:16 ] 特定の範囲の整数(例えば1〜10000)だけを入力させたいのですが、 fgets()使用時に桁溢れを完全に抑止することは可能ですか? char *buf[10]; unsigned int value; while(1) { fgets(buf, 10, stdin); 〜isdigit()とかで数値のみかを判定して、atoi()でvalueに格納してbreak〜 } fprintf(stdout, "%u\n", value); こんな感じで書いてるんですが、わざと入力を10桁以上にしたときに入力バッファに残ってしまってうまくいきません。 何かイイ方法あるでしょうか?(fflush(stdin)は無しで)
946 名前:945 mailto:sage [2007/09/13(木) 09:14:22 ] >>945 × char *buf[10] ○ char buf[10] orz
947 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 09:19:36 ] >>945 fgets の後で fscanf(stdin,"%*[0-9]");
948 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 11:18:05 ] >>947 通常の入力をした場合(桁数が少ない場合)に入力待ちにならない?
949 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 11:22:42 ] fflush(stdin)と置換可能な関数を自作するのは厳しい とはいえ、fflush(stdin)は未定義 面倒くさいけど、fgetsで読み込んだbufに'\n'が有るかチェックして、 '\n'が無いなら'\n'が出てくるまで読み捨てることになる #include <stdio.h> #include <string.h> int main(void) { char buf[10]; char *p; int c; while (fgets(buf, sizeof buf, stdin) != NULL) { if ((p = strchr(buf, '\n')) != NULL) { *p = '\0'; } else { while ((c = fgetc(stdin)) != '\n' && c != EOF) {} } puts(buf); } return 0; }
950 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 12:33:40 ] もっといい方法あるのかもしれないけど、こんなんでどうかな int get_unsigned(unsigned *v) { char buf[16]; char *p; int c; if (fgets(buf, sizeof buf, stdin) == NULL) return EOF; if (strchr(buf, '\n') == NULL) while ((c = fgetc(stdin)) != '\n' && c != EOF) {} *v = strtoul(buf, &p, 10); return *p; } int main(void) { unsigned val; int end; while (printf(">>"), (end = get_unsigned(&val)) != EOF) { if (end == '\0' || isdigit(end)) printf("W:入力が切り捨てられました.\n"); else if (end != '\n') printf("W:不正文字がありました. '%c'\n", end); if (val < 1 || 10000 < val) printf("W:入力範囲外です.\n"); printf("<<%u\n", val); } return 0; }
951 名前:945 mailto:sage [2007/09/13(木) 13:55:57 ] >>947-950 ありがとうございます。おかげさまで解決しました。
952 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 14:16:48 ] scanf("%*[^\n]%*c");なんてできなかったっけ?
953 名前:デフォルトの名無しさん mailto:sage [2007/09/13(木) 14:20:57 ] >>952 それだと、次の文字が\nだと[^\n]にマッチしないので、その時点でひっかかり 読み捨てることが出来ない。 scanf("%*[^\n]"); scanf("%*c"); ならおk
954 名前:デフォルトの名無しさん [2007/09/15(土) 02:24:20 ] うーん勉強になるなあ。ここに書き込みしている人達て通算何年くらい勉強してきたんですか。 俺には凄過ぎっすよ。
955 名前:デフォルトの名無しさん [2007/09/15(土) 02:26:09 ] 名プログラマになる為に猛勉強だぜ。
956 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 09:32:53 ] ここは知ったかばっかり
957 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 15:28:45 ] 知ったかな〜知ったかな〜うにゃうにゃ はれってほれってひれんら〜
958 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 18:37:19 ] >>957 迂闊にも笑ってしまいますた
959 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:05:01 ] SHRT_MIN >= INT_MIN && SHRT_MAX <= INT_MAX 常に成り立つと思うのですが sizeof(short) <= sizeof(int) は処理系に関係なく成り立ちますか?
960 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 17:07:56 ] はい。
961 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 18:26:29 ] ANSI C99準拠の標準ライブラリについて、詳しく説明しているサイトありませんか? 素直に本買ったほうがいいでしょうか?
962 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 18:35:59 ] っ[JIS X 3010]
963 名前:961 mailto:sage [2007/09/18(火) 19:21:05 ] >>962 ありがとう。でも高いねコレ…素直に本買います。
964 名前:デフォルトの名無しさん mailto:sage [2007/09/18(火) 20:47:24 ] つ[ttp://www.jisc.go.jp]
965 名前:デフォルトの名無しさん [2007/09/19(水) 15:50:54 ] 設計(PAD)でファイルを開いて読み込んでファイルの情報を構造体に格納するのって どうやるか教えていただけませんか?
966 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 16:06:49 ] たぶんCの話じゃないと思うぞ
967 名前:デフォルトの名無しさん [2007/09/19(水) 17:28:22 ] 今C言語の勉強をしていて、ファイルの情報を構造体に格納して それをメモリに展開するってゆーのをやってまして
968 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 17:30:39 ] fread
969 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 17:32:23 ] そんなもんファイルにどういう形式でデータが記録されていて 格納する構造体はどんなものかによるとしか言えん
970 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 17:34:00 ] PADは関係あるのか?
971 名前:デフォルトの名無しさん [2007/09/19(水) 17:34:18 ] JIS X 3010-1993 を読むと 3.4 バイト 実行環境の基本文字集合の任意の要素を保持するために十分な大きさを持つデータ記憶域の単位。 1 バイト中のビット数は,処理系定義とする。 5.2.4.2.1 CHAR_BIT ビットフィールドでない最小オブジェクト(バイト)におけるビット数 6.3.3.4 sizeof演算子の結果は,そのオペランドの(バイト数での)大きさとする。 sizeof(char) == 1 となっているのですが,ここから char 型オブジェクトのデータ記憶域での大きさは 1 バイトで 1 バイトは CHAR_BIT ビットと判断できるでしょうか?
972 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 17:36:24 ] マジっすか。バイト=8bitだと信じてました。 int型が、その処理系で一番速く処理できるビット幅、というのは聞いたことありますが・・・
973 名前:967 [2007/09/19(水) 17:58:00 ] 今PADの最中なんです。 問題としてはファイルにある社員IDと氏名を構造体に格納し、 メモリに展開するというものです
974 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 18:06:04 ] C言語の規格改定って今でも進められているんでしょうか?
975 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 18:47:35 ] >>971 そう思って構わないはず。 >>973 常に8ビットを表す単位が必要なら、オクテットを使う。
976 名前:967 [2007/09/19(水) 19:03:57 ] 文字の長さが2-10で変化するってどゆ意味ですか? そもそも文字の長さってなんですか?
977 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 19:09:43 ] 次スレテンプレ 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 132 このスレは標準Cのみの限定スレです。 まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。 質問する前には最低限検索を。 エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。 C FAQ 日本語訳 www.kouno.jp/home/c_faq/ Cプログラマ必読 ・プログラミング言語C(通称 K&R) www.amazon.co.jp/exec/obidos/ASIN/4320026926/250-7563469-9920244 他の過去ログはここに nssearch.hp.infoseek.co.jp/clang/ 前スレ 【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131 pc11.2ch.net/test/read.cgi/tech/1170338926/ GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は 専門の別スレッド↓があるのでそこへさようなら。 【初心者歓迎】C/C++室 Ver.42【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1188748806/ C/C++の宿題を片付けます 95代目 pc11.2ch.net/test/read.cgi/tech/1187944110/
978 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 19:15:34 ] GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は ↓ GUIなどの標準Cではできない事の質問、ソース丸投げ、宿題、書籍 は 何か気になるから変えてくれたら嬉しい
979 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 19:58:51 ] >>937 お前前も来たな 帰れ いや 死ね
980 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 19:59:21 ] >>973 だった
981 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 20:22:18 ] (char *)*char_list->c という式が表す値は (char *)型のポインタcが指しているデータ (char *)型のデータ のどっちなんでしょうか?
982 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 20:37:54 ] 演算子の優先順位から、(char *)(*(char_list->c))
983 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 20:47:49 ] >>982 その式を見るとカッコ(キャスト)よりも*演算子のほうが優先されている みたいなんですが、(1+2)*(3*3)のようなカッコとキャストとしてのカッコは 別物として扱われているんでしょうか?
984 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 20:52:45 ] そりゃ意味からして別物だろうが
985 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 20:56:27 ] ついでに言うと、関数呼出演算子の括弧も別物。
986 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:04:19 ] >>985 全部一緒くたにして考えてました。orz 最後にもう一つ、 char c = 'a'; char *pc = &c printf("%d\n", (int)*pc); 予想では上のコードは4バイト分の整数を出力すると思ったのに、 実際にやってみたらa一つ分の97しか出力しませんでした。 これは何故なんでしょうか?
987 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:06:35 ] 何を言ってるんだ、お前は
988 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:07:45 ] *(int*)pc とでもやりたかったのか?
989 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:09:33 ] >>986 何が言いたいか分からん。 97は2桁だろ。何が出て欲しいんだか。
990 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:11:57 ] >>986 charだろうがintだろうが10進数で出力したら97だろ
991 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:13:08 ] >>986 >4バイト分の整数 この部分を具体例をあげつつ詳細に説明してくれ
992 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:15:21 ] char c = 'a'; char *pc = &c; printf("%d\n", sizeof((int)*pc)); 4バイト(intの大きさ)分の整数が出力されているってのはあってるぞ
993 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 21:16:26 ] >>986 これでどうだ。 printf("%.8X\n", (unsigned int)(unsigned char)*pc); ここにunsigned intへのキャスト演算子は不要だがサービスしておいた。
994 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 22:21:24 ] >>973 PADって構造化フローチャートみたいなやつ?
995 名前:デフォルトの名無しさん mailto:sage [2007/09/19(水) 22:24:57 ] >>994 大学でやった記憶が
996 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 02:05:03 ] 99というのはISOの年度だからANSI C99というのはおかしくないか
997 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 02:12:12 ] おかしいね。 ANSI C89 ISO C90 ISO C95(と言っていいのか) ISO C99
998 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 08:33:04 ] 個人的にはC89とかC99の前にANSIとかISOとか付いてる時点でキモい。 まぁキモいだけで、だからどうしようってほどじゃないけど。
999 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 09:18:44 ] 埋め
1000 名前:デフォルトの名無しさん mailto:sage [2007/09/20(木) 09:20:04 ] 梅
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。