- 1 名前:デフォルトの名無しさん [2019/04/02(火) 11:23:37.62 ID:SQXqRaAc0.net]
- !extend:checked:vvvvv:1000:512
C言語の話題のみ取り扱います C++の話題はC++スレへ 質問には最低限の情報(ソース/コンパイラ/OS)を付ける 数行で収まらないソースは以下を適当に使ってURLを晒す https://paiza.io/ https://ideone.com/ codepad.org/ C11 www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf C99 www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf kikakurui.com/x3/X3010-2003-01.html C FAQ 日本語訳 www.kouno.jp/home/c_faq/ JPCERT C コーディングスタンダード https://www.jpcert.or.jp/sc-rules/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
- 411 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:32:32.58 ID:2T/oydys0.net]
- >>396
じゃあ、戻り値そのまま使えば? mallocは使うんでしょ?
- 412 名前: mailto:sage [2019/05/05(日) 10:33:46.84 ID:3EWrT4Pn0.net]
- >>397
その場合無駄な代入が発生しますね、>>393 がいい例を示しています
- 413 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:35:01.06 ID:bV6goPu10.net]
- エラー伝達に NULL を使う realloc は即代入するとお漏らししちゃうし
あれ、なん引数書き戻しにしなかったんだろう? 素朴な疑問
- 414 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:35:57.12 ID:2T/oydys0.net]
- >>398
代入されているのかされていないのか、わからない方が良いってこと?
- 415 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:36:08.55 ID:bV6goPu10.net]
- ×あれ、なん引数書き戻しに
○あれ、なんで引数書き戻しに
- 416 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:41:29.60 ID:2T/oydys0.net]
- >>399
正直、nullが来た時点で終わってるしなあ…。 まあでも一時変数使うのが筋だと思いますよ。戻り値でも引数でも同じこと。
- 417 名前: mailto:sage [2019/05/05(日) 11:25:51.36 ID:3EWrT4Pn0.net]
- >>400
ちがいます 代入するのか代入しないのかは malloc() したかしなかったかにかかっています。 代入は malloc() したとききだけにすればよく それが >>393 の func2(&ptr, opt); の書き方 一方 >>393 ptr = func1(ptr, opt); は malloc() したかしないかにかかわらず代入を行います、これは無駄な代入を含みます
- 418 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 11:31:24.71 ID:2T/oydys0.net]
- >>403
だから、関数の内部的に何してるのかわからんのが良いってことじゃない?
- 419 名前: mailto:sage [2019/05/05(日) 11:37:36.53 ID:3EWrT4Pn0.net]
- >>404
着目点はそこにはありません。関数による記述で内部を隠蔽するのが目的ではありません 問題は、malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@、にかかっており >>393 ptr = func1(ptr, opt); は@を記述できる可能性が皆無、一方 >>393 func2(&ptr, opt); は@を記述できる可能性がある、というわけです
- 420 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 11:38:01.66 ID:orE8GGyod.net]
- >>393
前者の方が好ましい 2重ポインタなんて最適化の妨げになるものは、それしか使えない場面でのみ使うべき
- 421 名前: mailto:sage [2019/05/05(日) 11:44:46.28 ID:3EWrT4Pn0.net]
- >>406
非常に大きな二分木(ノートが1億個)があって、そのはるか先端で malloc() してそこで代入すればいいだけなのに、 その先端から root に戻ってくる途中の3
- 422 名前:0箇所ほどで、軒並み全部のノードで「必要のない無駄な代入」をするのですか?
>それしか使えない場面でのみ使うべき この二分木を実装する、というのがまさしく「それしか使えない場面」なのですよ [] - [ここ壊れてます]
- 423 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 11:45:42.03 ID:2T/oydys0.net]
- >>405
つまり、後者でmallocしてnullが返った時はそれを代入するってことですか?同じじゃん。
- 424 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 11:47:06.67 ID:2T/oydys0.net]
- >>407
二分木のコストってのは比較であって代入じゃないと思いますよ。 まあアルゴリズムの一般論としては。
- 425 名前: mailto:sage [2019/05/05(日) 11:53:15.92 ID:3EWrT4Pn0.net]
- >>408
>>393 func2(&ptr, opt); では malloc() して null が返ってきたときは、例えば何もしない、ということはできますね でも >>393 ptr = func1(ptr, opt); は、malloc() しようがしまいが代入してしまいますね、これは「やる必要のない無駄な代入」が含まれることになり、好ましくないです >>393 ptr = func1(ptr, opt); の記述法は二分木を最初に習うときに、この記述法で理解を促すという意味では有用であっても、 いつまでもこれで書いているようでは進歩していない、もっといえば怠惰である、と考えています
- 426 名前: mailto:sage [2019/05/05(日) 11:55:53.32 ID:3EWrT4Pn0.net]
- >>409
しかし無駄な代入を放置してよいというわけではないでしょうね、削れるところは削るべきです 単純二分木よりさらに改良された平衡二分木(AVL木、赤黒木等)を紹介する書籍では、最初から >>393 func2(&ptr, opt); で記述されていますよ
- 427 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 11:57:28.30 ID:2T/oydys0.net]
- >>410
じゃあ隠蔽しろという話なんじゃないの? 関数の中で成功失敗を判定して外にnullは返すな入力時のままにしとけ、という関数。
- 428 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 11:58:36.27 ID:2T/oydys0.net]
- >>411
代入回数比較してよ。頼むよ。
- 429 名前: mailto:sage [2019/05/05(日) 12:05:45.99 ID:3EWrT4Pn0.net]
- >>412
ちがいますね 問題は、malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@、にかかっています。 >>413 >>407 に書いておきました、1億ノードの二分木にて各ノードが最適に配置されているとして、削ることのできる代入は malloc() 一回に対して 30 個の代入になります >>393 ptr = func1(ptr, opt); では 1億ノードの二分木にノードを追加する際、30個の無駄な代入が発生します 代入のコストは大したことがない、にしても、アルゴリズムを正確に記述できないのは問題ですね 洗練された記述とはそういうものではないでしょうか
- 430 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 12:48:51.19 ID:2T/oydys0.net]
- >>414
いや、mallocがnull返した時はいれないんでしょ? 成功か失敗かじゃないの?呼んだかどうかじゃなくて。
- 431 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 12:52:54.83 ID:2T/oydys0.net]
- 仕事では戻り値に成功失敗が入ってオブジェクトのポインタは引数に来るような関数は使うけどさ、
結局どっちもチェックするよ。信じられねえもんな。
- 432 名前: mailto:sage [2019/05/05(日) 13:12:30.38 ID:3EWrT4Pn0.net]
- >>415
malloc() が成功したか失敗したかは、今の話には関係ありません 今関係があるのは、 malloc() したときだけ代入し、malloc() しなかったときには代入しない、という記述を正確にかけるかどうか…@ です
- 433 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 13:42:25.11 ID:2T/oydys0.net]
- >>417
じゃあ、絶対代入するってことだろうよ。 引数に渡したポインタに。ポインタを。
- 434 名前: mailto:sage [2019/05/05(日) 13:51:49.48 ID:3EWrT4Pn0.net]
- >>418
malloc() したときは代入しますよ、でも malloc() しないときは代入なんかせず、そのまま呼び出し元に返るだけです それが>>393 ptr = func1(ptr, opt); 方式と絶対的に違うのです
- 435 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 13:55:35.88 ID:2T/oydys0.net]
- >>419
戻り値はvoidってこと?
- 436 名前: mailto:sage [2019/05/05(日) 14:02:45.71 ID:3EWrT4Pn0.net]
- >>420
>>393 func2(&ptr, opt); 式なら void もありえます
- 437 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 14:08:06.37 ID:2T/oydys0.net]
- >>421
いや、必須なのでは?
- 438 名前: mailto:sage [2019/05/05(日) 14:11:38.90 ID:3EWrT4Pn0.net]
- >>422
いいえ、実際に実装するならば、エラーを伝達する手段として返り値を準備することは大いにありえるでしょうね void が必須ではありません 必要な代入なら使えばいい、でも >>393 ptr = func1(ptr, opt); 方式は不必要な代入があり、単に二重ポインタを使用して記述すればこれは除去できるので、 >>393 ptr = func1(ptr, opt); を書くのは問題だし、これを書く人は頭を使っていない、と判断します
- 439 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 14:33:08.37 ID:bV6goPu10.net]
- 異常は戻りをNULLにするパティーンで
node_t *func3(node_t**, ...) 正常だった場合に ptr = func3(&ptr, opt); と書けるしw (無駄な努力の可能性
- 440 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 14:34:34.27 ID:bV6goPu10.net]
- って書いたけど鼻から悪魔踏みそうな嫌らしさがあるな…
- 441 名前: mailto:sage [2019/05/05(日) 15:03:58.07 ID:3EWrT4Pn0.net]
- >>424
そのパターンでは、異常値 NULL をうっかりノードに登録してしまうと、そのノードより下が浮いてしまい危ないですね、ま、異常系をミスったままリリースしてしまうことも私はよくやりますけど
- 442 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 15:42:24.13 ID:8x8syc+Fa.net]
- >>423
いや、必須でしょ?代入消せるんだから。消さないと。
- 443 名前: mailto:sage [2019/05/05(日) 17:54:28.38 ID:3EWrT4Pn0.net]
- >>427
言葉尻を捕らえて攻めたつもりになっているようですね 「すべての代入を消去できる」なんていってませんよね >>393 ptr = func1(ptr, opt); この代入は不要な代入を含むので、 >>393 ptr = func1(ptr, opt); は不適当な書き方だ、とこれまで首尾一貫して述べているのです
- 444 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:13:23.13 ID:bV6goPu10.net]
- 423の文意は
「void が必須なわけではなく 引数と同じ型のポインタを戻すことはせずに、別の目的の何か、たとえばエラーコードとして int を戻す なんてのはアリでしょ?」 ってことだと思うけど
- 445 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:42:49.42 ID:dOx23ziba.net]
- returnしちゃだめでしょ
代入が駄目ってくらいだから
- 446 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:56:43.02 ID:bV6goPu10.net]
- 「代入不要なケースでも代入記述を要求するのはよろしくない」スタイルの延長だと
戻り値評価も破棄可能ならそうすべき って話か
- 447 名前: mailto:sage [2019/05/05(日) 19:00:00.98 ID:3EWrT4Pn0.net]
- >>430
どんな代入もだめだとは主張していませんね… >>393 ptr = func1(ptr, opt); 方式は不必要な代入があり、単に二重ポインタを使用して記述すればこれは除去できるので、 >>393 ptr = func1(ptr, opt); の代入が駄目だとはいってきていますけれども
- 448 名前:はちみつ餃子 mailto:sage [2019/05/05(日) 19:03:30.45 ID:TxpPZKKr0.net]
- >>407
- 449 名前:はちみつ餃子 mailto:sage [2019/05/05(日) 19:13:46.27 ID:TxpPZKKr0.net]
- あ、ごめん、ミスって文章を書く前に投稿してもうた。
>>407 あらためて確認するが、この代入を「無駄」としているのはアルゴリズムの表現の上では不要なことをしているという 意味の上での無駄であって、性能上の無駄という意味ではないんだね? そして、アルゴリズムを正しく表現する上では (ときには二重・三重のも含めて) ポインタが必要だと。
- 450 名前: mailto:sage [2019/05/05(日) 20:16:09.59 ID:3EWrT4Pn0.net]
- >>434
>性能上の無駄という意味ではないんだね? 性能の上で分析するとなると、間接参照にてデータをロード、ストアするコストと値をストアするコストを天秤にかける、ことになりますね なるほど、その点を言いたくて、でも言いたくなくて、しつこく絡んでいたのですか… 私は二重ポインタでの表現の方がトータルでお得だ、とは思ってはいますが、これまで表に出ている私の発言は、あえてそこには踏み込まず(だって性能の話はうかつに断言できませんからね…)、 おっしゃるとおり「アルゴリズムの表現の上では不要なことをしている」に留まっています
- 451 名前:はちみつ餃子 mailto:sage [2019/05/05(日) 20:57:45.43 ID:TxpPZKKr0.net]
- >>435
たとえば数学上の表記なら「A=1 であり B=1 のとき A=B は真である」と「1=1 は真である」には何も差が無い。 途中で名前を付けるのは人間に対する便宜であって、無駄な「操作」は存在しない。 代入が無駄たりうるのは C のパラダイムだからなので、 「C で表現するにはポインタが必要だし、代入では不適当だ」は事実であっても 「ポインタが無い言語では表現できない」というわけではないよ。 C の低級な世界でまともな意味論を表現しようとするのがそもそもの間違いだろう。
- 452 名前: mailto:sage [2019/05/05(日) 21:02:18.49 ID:3EWrT4Pn0.net]
- >>436
>「ポインタが無い言語では表現できない」というわけではないよ。 それは理解しています、なぜなら Java での二分木の実装を検討したことがある(探せば2ch過去ログにあるかもしれません) Java にはポインタはありませんが、実装できるかできないか、といえば「できる」の方に入りますね
- 453 名前:はちみつ餃子 mailto:sage [2019/05/05(日) 21:54:26.85 ID:TxpPZKKr0.net]
- >>437
そこまでわかっているのなら、 「代入しない」と「同じ値を代入しなおす」が意味論的に等しいということがどうしてわからないんだ。
- 454 名前:デフォルトの名無しさん [2019/05/05(日) 23:34:40.25 ID:RXFRr1FQ0.net]
- C言語のプログラム内で確保していいメモリってユーザー空間の仮想メモリ上限いっぱいまで取っていいの?
複数の変数a, b, c, ・・・の値を表示するだけのプログラムを時系列に並べて考えてみるんだけど 0. 実行ファイルを起動する 1. 32bitプロセスが生成される ←たとえば32bit windowsだとユーザー空間とカーネル空間で計4GBの仮想メモリが確保される 2. int a; ←仮想メモリ(1で確保されたユーザー空間)上にaが確保される int b; ←上に類似 int c; ←上に類似 ・・・・・(複数の変数の宣言やprintf関数が続く) こんな感じなんだろうけど 上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの?
- 455 名前:はちみつ餃子 mailto:sage [2019/05/05(日) 23:38:14.20 ID:TxpPZKKr0.net]
- >>439
いいけど、もっと効率的な方法があるならそれに越したことは無いっていうそれだけの話
- 456 名前:デフォルトの名無しさん [2019/05/05(日) 23:41:29.98 ID:RXFRr1FQ0.net]
- 簡潔に書くと
安全のためにはどこまでメモリを使っていいの? そのメモリの大きさはユーザー空間の上限と同じなの? という室問なのに長くなってしまた
- 457 名前:デフォルトの名無しさん [2019/05/05(日) 23:47:50.76 ID:RXFRr1FQ0.net]
- >>440
ありがとう ただ初心者なので効率性を目指すにはきつい部分が出てくる そうなるとメモリの残量を監視する、つまり残量の値を取得する必要があるわけだけど これは一般的にはwindowsのAPIを使うのが普通なの? (そんなものがあるのかは知らない)
- 458 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 23:52:54.47 ID:RPhfdkos0.net]
- >>442
スタックとヒープという概念は知ってる?知らなければまずそれを調べてみて。 それと、初心者なら効率を求める前に正しくメモリ管理を扱えるようになる必要があるが、その時点で残量は気にする必要はないぞ。
- 459 名前:デフォルトの名無しさん [2019/05/05(日) 23:59:16.82 ID:RXFRr1FQ0.net]
- FIFOだとかナントカ程度にしか。
「〜〜領域」という幾つかの用語がOSとかの環境が違っても 全く共通のものなのかよく分からないから正直スルーしてる
- 460 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 05:38:27.60 ID:wr9bFPpT0.net]
- >>414
>1億ノードの二分木にノードを追加する際、30個の無駄な代入が発生します 2^10 = 約1,000 千 2^20 = 約1,000,000 百万 2^30 = 約1,000,000,000 十億 >>441 Java VM の初期値は、256MB とか。 それよりも大きいと強制終了されるが、起動時に、512MBに設定できる たぶん、4GB の仮想メモリでも、ユーザー空間3GB・カーネル空間1GBぐらいだろ それ以上のデータは、動画みたいにstream になる。 バッファサイズ、例えば、1MB を読んでは捨てて、次の1MB読んでは捨てて、の繰り返し 読み込んだデータを使ったら、すぐに捨てないといけない。 ユーザー空間に、空きを作らないといけない
- 461 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 06:20:53.21 ID:Geq8Gq1G0.net]
- >>445
いつものRubyバカだろ。いい加減な知識でC言語のメモリの話題に口を挟むのはやめろ。この板になれている者からすれば「またいつものか...」ですむが、初心者にとっては害悪でしかないから消えろ。
- 462 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 06:25:32.64 ID:Geq8Gq1G0.net]
- >>444
組み込みとかの特殊な環境では例外もあるけど、基本的には環境によらずC言語で必須の概念だからスルーせずにちゃんと調べるべき。
- 463 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 08:39:59.60 ID:s1ulBxFy0.net]
- >439
>上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの? 他のプロセスがスワップ起こして重くなるから止めろって言いたい。
- 464 名前:デフォルトの名無しさん [2019/05/06(月) 10:14:49.95 ID:Om5TJBQR0.net]
- >>447
うん調べてみるよ ありがとう >>448 そんな視点もあるのか 他のプロセスも考慮しないといけない 思ったよりも数段以上やっかいだな
- 465 名前:デフォルトの名無しさん [2019/05/06(月) 10:19:59.43 ID:Om5TJBQR0.net]
- >読み込んだデータを使ったら、すぐに捨てないといけない
データをガンガン読み込んでいくようなプログラムだと「使ったらすぐ捨てる」のが鉄則か
- 466 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 10:40:24.77 ID:F7BEaxMm0.net]
- >>439
ユーザープロセスなのでカーネル空間はマッピングされないよ。プロセス管理のための領域はカーネル空間に多少は確保されるとは思うけど、それはユーザープロセス用ではないし。 ページサイズの関係で効率的に確保できるかどうかは別問題だけど仮想メモリ領域いっぱいまで取れるか否かと言えば取ることはできる。 実際にそんなことしたらスワップ発生しまくりでまともに動かないとは思うけど。
- 467 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 12:43:21.39 ID:53K/0wkW0.net]
- 実装としてはだいたいcopy on writeだから、確保だけだったら特に問題発生しないよ
- 468 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 16:08:26.90 ID:95XsbNbMM.net]
- >>451
どのOSなのか明示してくれ。 少なくともlinux 32bitは3GB以降はkernel空間にマッピングされてるだろ
- 469 名前:デフォルトの名無しさん [2019/05/06(月) 21:20:46.06 ID:lSipB+Y80.net]
- 配列にある16進数アスキーを
整数型変数に数値として入れたいのですが、上手くいきません。 valの値をprintfで出力しても「0」になります。 rbuf[5]の中身は「0xDC」 rbuf[6]の中身は「0x18」でした。(printfで出力してみたところ。) #include <stdio.h> unsigned char sbuf[255] = {'\0'}; //送信バッファ unsigned char rbuf[255] = {'\0'}; //受信バッファ unsigned char work[10] = {'\0'}; //ワークバッファ unsigned int val = 0; //値 work[0]=rbuf[5]; work[1]=rbuf[6]; work[2]='\0'; sscanf((char *)work, "%x", &val); よろしくお願いします。
- 470 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 21:29:36.69 ID:v87Zm/5a0.net]
- sscanf の %x は、文字列で記述された数字+アルファベットの列を 16進数として抜き出す
sscanf("10", "%x", &val); → val の値は 10進で16 となる 0xDC 0x18 の並びから どういう整数値にしたいんだろうか?
- 471 名前:454 [2019/05/06(月) 21:38:34.55 ID:lSipB+Y80.net]
- >>455
回答ありがとうございます。 val=0xDC18 という感じで取り出したいです。
- 472 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 21:40:18.62 ID:v87Zm/5a0.net]
- >>456 それなら
val = rbuf[5]; じゃあかんの?
- 473 名前:454 [2019/05/06(月) 21:50:08.40 ID:lSipB+Y80.net]
- >>457
ありがとうございます。そういうことか・・・ 下記で上手くできました! val= rbuf[5]; val = val << 8; val |= rbuf[6];
- 474 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 21:54:12.13 ID:v87Zm/5a0.net]
- >>458 解決してよかったね
0xDC 0x18 の並びから (最低でも32bit長の整数)0xDC18 が欲しかったということだね
- 475 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 21:55:43.20 ID:v87Zm/5a0.net]
- (俺がちゃんと >>456 を読めてなかった説 val=0xDC18 って書いてるやんけw)
- 476 名前:デフォルトの名無しさん [2019/05/06(月) 22:06:19.06 ID:NYoOX9LAa.net]
- >>454
> rbuf[5]の中身は「0xDC」 > rbuf[6]の中身は「0x18」でした。(printfで出力してみたところ。) だったらそれはASCIIではないよね。
- 477 名前:デフォルトの名無しさん [2019/05/06(月) 22:08:02.81 ID:NYoOX9LAa.net]
- などと、ゆっくり書いていたら既に解決か・・・
- 478 名前:デフォルトの名無しさん [2019/05/06(月) 22:09:16.82 ID:lSipB+Y80.net]
- >>460
>>461 ありがとうございます。 お陰様で解決できました。 勝手にASCII、文字列と勘違いしていたのがよくなかったです。
- 479 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 06:48:35.98 ID:/Z9tG+PY0.net]
- ASCII は、7 bit キャラだろ
欧州文字コードなら、8 bitとか
- 480 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 15:31:36.79 ID:gGAOuhJk0.net]
- BASIC時代 文字→文字コード変換関数が ASC(文字) だったな。
- 481 名前:デフォルトの名無しさん mailto:sage [2019/05/08(水) 20:11:19.53 ID:w7dyIR3e0.net]
- 逆はCHR$(コード)だったな。
- 482 名前:デフォルトの名無しさん mailto:sage [2019/05/08(水) 22:02:13.36 ID:LqpjdKM80.net]
- 「なんで朝潮?」と思ってしまった当時の俺w
- 483 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 08:32:10.12 ID:IVg2TokP0.net]
- わらってよりとも というのは、当時の人気番組名をもじったものだよ
- 484 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 12:40:11.38 ID:J26JobOx0.net]
- https://ae01.alicdn.com/kf/HTB1goomIL1TBuNjy0Fjq6yjyXXaS/Cetak-Pria-Kaus-Katun-Leher-o-Tshirts-ANSI-Pemrograman-C-Buku-Jepang-Lengan-Pendek-Wanita-Kaus.jpg_640x640.jpg
- 485 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 20:40:23.75 ID:axmpki24M.net]
- 「はじめてのC」なら買う
- 486 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 22:18:17.14 ID:fgRKvhjn0.net]
- その本の名前、買うときに恥ずかしいw
- 487 名前:デフォルトの名無しさん mailto:sage [2019/05/09(木) 23:03:35.49 ID:vEdVh+9n0.net]
- 質問です
文字列の配列 char matrix[Y][X]を関数に引数として渡して、渡した先の関数でtxtファイルに出力したい。 YとXはその時々によって違う値でmatrixは文字列の配列だけど1行ごとに'\0'が入っていないとき、渡した先の関数でYとXをどうやれば参照できますか? 例えば matrix = {{‘a’, ‘b’, ‘c’}, {‘d’, ‘e’, ‘f’}}; みたいな配列です
- 488 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 00:00:40.06 ID:IBOrEgMWa.net]
- X(配列のサイズ)を共有してやればいいんじゃないかな
- 489 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 00:14:05.05 ID:Ojl9YgLP0.net]
- >>472
matrixのアドレスと共にX、Yの値を渡さないと無理
- 490 名前:デフォルトの名無しさん [2019/05/10(金) 03:11:16.60 ID:+vHN15fT0.net]
- >>472
https://qiita.com/Hiraku/items/babed27bc1d750c2e12d
- 491 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 09:26:09.21 ID:bwAvNWKg0.net]
- >>474
やっぱり配列のサイズ一緒に渡さないとだためですか
- 492 名前:デフォルトの名無しさん [2019/05/10(金) 09:44:04.32 ID:0Zlxa6bHa.net]
- そう。他の言語だと裏でこっそり渡すようになっていたりしてプログラムに書かなくても動くかも知れないが、Cはそこまでやってくれない。
- 493 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 10:05:05.80 ID:hw8N8wYC0.net]
- 標準関数も一次元配列ですら大きさを渡してるからねー
(文字列は '\0' が終端である という了解を持って大きさを不要にしているだけ)
- 494 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 12:34:03.34 ID:zZfQYrbwd.net]
- >>475
URL張って解党した気になってるアスペルガーのカスがスレ来んな
- 495 名前:デフォルトの名無しさん [2019/05/10(金) 23:50:49.39 ID:svzEPJh90.net]
- え?読んでもわからなかったの?
- 496 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 07:43:24.28 ID:glRpLuyC0.net]
- 確かにつまらんね
リンクだけとかググレカスとか せっかく掲示板にいるのに対話がないのは
- 497 名前:はちみつ餃子 mailto:sage [2019/05/11(土) 09:55:06.58 ID:GtXmrqj00.net]
- >>481
リンクを示すのも、ググればわかるようなことにググれというのも対話だよ。 対話を終わらせてるのはお前だろ。 リンク先を見て意味がわからんかったならどうわからなかったか、 よりよい説明があると思うならそれを示してもいい。 望むことだけ欲しいというのは対話とは言えんよ。
- 498 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 10:34:34.75 ID:glRpLuyC0.net]
- >>482
話が噛み合ってない おまえさんとは平行線のようだな
- 499 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 11:46:55.45 ID:0ygzdBDA0.net]
- ID:glRpLuyC0が対話する気なさすぎて草w
- 500 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:23:55.76 ID:9iCvmH6s0.net]
- ここは質疑を行うスレであって
対話したり、雑談したりする場ではない
- 501 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 19:10:51.09 ID:HOBfdmGr0.net]
- Cの上位互換(?)として、C++がありますが。C++は覚えた方がいいですか?
もしくは、CとC++を両方覚えたら、Cは不要になり、C++でコードを書くようになりますか? C++でできることはCでもできるように見えますので、ならCだけでいいようにも思えたり。
- 502 名前: mailto:sage [2019/05/11(土) 19:18:54.28 ID:KtHZQgR00.net]
- >>486
C++ は最近規格の改定がすすみ、いろんなことが C++ の枠内でできるようになりました
- 503 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 19:21:03.92 ID:2v2BzL6t0.net]
- >>486
言っておくが、python,C++,Java,javascript,C#,shellでできる事はC言語でも出来る 更に君が作ろうとしてるものや、やりたいことは、もう誰かが作ってる ましてや大規模になると、googleとかamazonと戦う羽目にもなる それが嫌ならプログラミングなんて辞めとけ
- 504 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 19:32:35.19 ID:HOBfdmGr0.net]
- >>487-488
了解です、ありがとうございます
- 505 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 21:07:19.81 ID:glRpLuyC0.net]
- >>484-485
482は反対意見を述べているという意味でまだいいところがあったが てめーらは一方的な押しつけしか頭にない100%真のノイズだ
- 506 名前:はちみつ餃子 mailto:sage [2019/05/11(土) 21:28:03.11 ID:GtXmrqj00.net]
- >>490
既に解説があると示すのも質問に対する回答として十分だし、それで不満な理由がまるでわからん。 それが対話でないと断言するのも意味がわからん。 結局のところどうして欲しいの?
- 507 名前:デフォルトの名無しさん [2019/05/11(土) 22:15:36.12 ID:YLmnNEXIa.net]
- きっと寂しいんだよ。
- 508 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 22:49:22.08 ID:glRpLuyC0.net]
- >>491
意味がわからんからどうした? 平行線の相手に何か言って欲しいのか?
- 509 名前:はちみつ餃子 mailto:sage [2019/05/12(日) 10:19:15.38 ID:l86zXz3/0.net]
- >>493
そう決めつけて続きを拒むなら「一方的な押し付けしか頭にない」「対話がない」というまさにそれでしかなくね? 意味がわからんから解説してくれっての。 わからんことを理解する必要があるから対話になるんだろ。
- 510 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:22:06.40 ID:VeGHf8Lz0.net]
- >>494
自分の言葉で何か言えよと思う俺の意見を おまえ真っ向から全否定しただろ だから接点がないと判断したんだ 接点があるなら最初の態度を撤回しろ 話はそれからだ
- 511 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:57:36.56 ID:7nn+3/Jt0.net]
- >>495
意見を全否定って、そりゃ異なる意見があるのは当然だろう。異なる考えなら議論にならないなんて、議論する気が無いだけだろう。 ついでだが、俺もお前さんの意見には反対だ。自分の言葉で書くかはまったく重要ではないと思う。お手軽に書ける掲示板のレスは言葉足らずだったり不正確な表現なことも多々あるが、それよりきちんと纏まった情報をリンクされた方がありがたいことも多い。
|

|