[過去ログ] C言語なら俺に聞け 151 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
422(1): (ワッチョイ 7fe9-3iRC) 2019/05/05(日)14:08 ID:2T/oydys0(15/15)調 AAS
>>421
いや、必須なのでは?
423(1): ◆QZaw55cn4c (ワッチョイ 8247-R0y6) 2019/05/05(日)14:11 ID:3EWrT4Pn0(17/22)調 AAS
>>422
いいえ、実際に実装するならば、エラーを伝達する手段として返り値を準備することは大いにありえるでしょうね
void が必須ではありません
必要な代入なら使えばいい、でも
>>393 ptr = func1(ptr, opt);
方式は不必要な代入があり、単に二重ポインタを使用して記述すればこれは除去できるので、
>>393 ptr = func1(ptr, opt);
を書くのは問題だし、これを書く人は頭を使っていない、と判断します
424(1): (ワッチョイ f701-EPtf) 2019/05/05(日)14:33 ID:bV6goPu10(4/7)調 AAS
異常は戻りをNULLにするパティーンで
node_t *func3(node_t**, ...)
正常だった場合に ptr = func3(&ptr, opt); と書けるしw (無駄な努力の可能性
425: (ワッチョイ f701-EPtf) 2019/05/05(日)14:34 ID:bV6goPu10(5/7)調 AAS
って書いたけど鼻から悪魔踏みそうな嫌らしさがあるな…
426: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) 2019/05/05(日)15:03 ID:3EWrT4Pn0(18/22)調 AAS
>>424
そのパターンでは、異常値 NULL をうっかりノードに登録してしまうと、そのノードより下が浮いてしまい危ないですね、ま、異常系をミスったままリリースしてしまうことも私はよくやりますけど
427(1): (アウアウカー Sa47-3iRC) 2019/05/05(日)15:42 ID:8x8syc+Fa(1)調 AAS
>>423
いや、必須でしょ?代入消せるんだから。消さないと。
428: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) 2019/05/05(日)17:54 ID:3EWrT4Pn0(19/22)調 AAS
>>427
言葉尻を捕らえて攻めたつもりになっているようですね
「すべての代入を消去できる」なんていってませんよね
>>393 ptr = func1(ptr, opt);
この代入は不要な代入を含むので、
>>393 ptr = func1(ptr, opt);
は不適当な書き方だ、とこれまで首尾一貫して述べているのです
429: (ワッチョイ f701-EPtf) 2019/05/05(日)18:13 ID:bV6goPu10(6/7)調 AAS
423の文意は
「void が必須なわけではなく
引数と同じ型のポインタを戻すことはせずに、別の目的の何か、たとえばエラーコードとして int を戻す
なんてのはアリでしょ?」
ってことだと思うけど
430(1): (アウアウエー Sa3a-3iRC) 2019/05/05(日)18:42 ID:dOx23ziba(1)調 AAS
returnしちゃだめでしょ
代入が駄目ってくらいだから
431: (ワッチョイ f701-EPtf) 2019/05/05(日)18:56 ID:bV6goPu10(7/7)調 AAS
「代入不要なケースでも代入記述を要求するのはよろしくない」スタイルの延長だと
戻り値評価も破棄可能ならそうすべき って話か
432: ◆QZaw55cn4c (ワッチョイ 8247-R0y6) 2019/05/05(日)19:00 ID:3EWrT4Pn0(20/22)調 AAS
>>430
どんな代入もだめだとは主張していませんね…
>>393 ptr = func1(ptr, opt);
方式は不必要な代入があり、単に二重ポインタを使用して記述すればこれは除去できるので、
>>393 ptr = func1(ptr, opt);
の代入が駄目だとはいってきていますけれども
433: はちみつ餃子◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z) 2019/05/05(日)19:03 ID:TxpPZKKr0(1/5)調 AAS
>>407
434(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z) 2019/05/05(日)19:13 ID:TxpPZKKr0(2/5)調 AAS
あ、ごめん、ミスって文章を書く前に投稿してもうた。
>>407
あらためて確認するが、この代入を「無駄」としているのはアルゴリズムの表現の上では不要なことをしているという
意味の上での無駄であって、性能上の無駄という意味ではないんだね?
そして、アルゴリズムを正しく表現する上では (ときには二重・三重のも含めて) ポインタが必要だと。
435(1): ◆QZaw55cn4c (ワッチョイ 8247-R0y6) 2019/05/05(日)20:16 ID:3EWrT4Pn0(21/22)調 AAS
>>434
>性能上の無駄という意味ではないんだね?
性能の上で分析するとなると、間接参照にてデータをロード、ストアするコストと値をストアするコストを天秤にかける、ことになりますね
なるほど、その点を言いたくて、でも言いたくなくて、しつこく絡んでいたのですか…
私は二重ポインタでの表現の方がトータルでお得だ、とは思ってはいますが、これまで表に出ている私の発言は、あえてそこには踏み込まず(だって性能の話はうかつに断言できませんからね…)、
おっしゃるとおり「アルゴリズムの表現の上では不要なことをしている」に留まっています
436(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z) 2019/05/05(日)20:57 ID:TxpPZKKr0(3/5)調 AAS
>>435
たとえば数学上の表記なら「A=1 であり B=1 のとき A=B は真である」と「1=1 は真である」には何も差が無い。
途中で名前を付けるのは人間に対する便宜であって、無駄な「操作」は存在しない。
代入が無駄たりうるのは C のパラダイムだからなので、
「C で表現するにはポインタが必要だし、代入では不適当だ」は事実であっても
「ポインタが無い言語では表現できない」というわけではないよ。
C の低級な世界でまともな意味論を表現しようとするのがそもそもの間違いだろう。
437(1): ◆QZaw55cn4c (ワッチョイ 8247-R0y6) 2019/05/05(日)21:02 ID:3EWrT4Pn0(22/22)調 AAS
>>436
>「ポインタが無い言語では表現できない」というわけではないよ。
それは理解しています、なぜなら
Java での二分木の実装を検討したことがある(探せば2ch過去ログにあるかもしれません)
Java にはポインタはありませんが、実装できるかできないか、といえば「できる」の方に入りますね
438: はちみつ餃子◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z) 2019/05/05(日)21:54 ID:TxpPZKKr0(4/5)調 AAS
>>437
そこまでわかっているのなら、
「代入しない」と「同じ値を代入しなおす」が意味論的に等しいということがどうしてわからないんだ。
439(3): (ワッチョイ 2f05-S4IJ) 2019/05/05(日)23:34 ID:RXFRr1FQ0(1/4)調 AAS
C言語のプログラム内で確保していいメモリってユーザー空間の仮想メモリ上限いっぱいまで取っていいの?
複数の変数a, b, c, ・・・の値を表示するだけのプログラムを時系列に並べて考えてみるんだけど
0. 実行ファイルを起動する
1. 32bitプロセスが生成される ←たとえば32bit windowsだとユーザー空間とカーネル空間で計4GBの仮想メモリが確保される
2. int a; ←仮想メモリ(1で確保されたユーザー空間)上にaが確保される
int b; ←上に類似
int c; ←上に類似
・・・・・(複数の変数の宣言やprintf関数が続く)
こんな感じなんだろうけど
上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの?
440(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 4e3e-Cg3z) 2019/05/05(日)23:38 ID:TxpPZKKr0(5/5)調 AAS
>>439
いいけど、もっと効率的な方法があるならそれに越したことは無いっていうそれだけの話
441(1): (ワッチョイ 2f05-S4IJ) 2019/05/05(日)23:41 ID:RXFRr1FQ0(2/4)調 AAS
簡潔に書くと
安全のためにはどこまでメモリを使っていいの?
そのメモリの大きさはユーザー空間の上限と同じなの?
という室問なのに長くなってしまた
442(1): (ワッチョイ 2f05-S4IJ) 2019/05/05(日)23:47 ID:RXFRr1FQ0(3/4)調 AAS
>>440
ありがとう
ただ初心者なので効率性を目指すにはきつい部分が出てくる
そうなるとメモリの残量を監視する、つまり残量の値を取得する必要があるわけだけど
これは一般的にはwindowsのAPIを使うのが普通なの?
(そんなものがあるのかは知らない)
443: (ワッチョイ 8252-M0pk) 2019/05/05(日)23:52 ID:RPhfdkos0(2/2)調 AAS
>>442
スタックとヒープという概念は知ってる?知らなければまずそれを調べてみて。
それと、初心者なら効率を求める前に正しくメモリ管理を扱えるようになる必要があるが、その時点で残量は気にする必要はないぞ。
444(1): (ワッチョイ 2f05-S4IJ) 2019/05/05(日)23:59 ID:RXFRr1FQ0(4/4)調 AAS
FIFOだとかナントカ程度にしか。
「〜〜領域」という幾つかの用語がOSとかの環境が違っても
全く共通のものなのかよく分からないから正直スルーしてる
445(1): (ワッチョイ e22c-4xtZ) 2019/05/06(月)05:38 ID:wr9bFPpT0(1)調 AAS
>>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読んでは捨てて、の繰り返し
読み込んだデータを使ったら、すぐに捨てないといけない。
ユーザー空間に、空きを作らないといけない
446: (ワッチョイ 8252-M0pk) 2019/05/06(月)06:20 ID:Geq8Gq1G0(1/2)調 AAS
>>445
いつものRubyバカだろ。いい加減な知識でC言語のメモリの話題に口を挟むのはやめろ。この板になれている者からすれば「またいつものか...」ですむが、初心者にとっては害悪でしかないから消えろ。
447(1): (ワッチョイ 8252-M0pk) 2019/05/06(月)06:25 ID:Geq8Gq1G0(2/2)調 AAS
>>444
組み込みとかの特殊な環境では例外もあるけど、基本的には環境によらずC言語で必須の概念だからスルーせずにちゃんと調べるべき。
448(1): (ワッチョイ 06d2-R0y6) 2019/05/06(月)08:39 ID:s1ulBxFy0(1)調 AAS
>439
>上記の2でユーザー空間いっぱいになるまで変数を宣言してもいいの?
他のプロセスがスワップ起こして重くなるから止めろって言いたい。
449: (ワッチョイ 2f05-73UM) 2019/05/06(月)10:14 ID:Om5TJBQR0(1/2)調 AAS
>>447
うん調べてみるよ
ありがとう
>>448
そんな視点もあるのか
他のプロセスも考慮しないといけない
思ったよりも数段以上やっかいだな
450: (ワッチョイ 2f05-73UM) 2019/05/06(月)10:19 ID:Om5TJBQR0(2/2)調 AAS
>読み込んだデータを使ったら、すぐに捨てないといけない
データをガンガン読み込んでいくようなプログラムだと「使ったらすぐ捨てる」のが鉄則か
451(1): (ワッチョイ d701-LHRJ) 2019/05/06(月)10:40 ID:F7BEaxMm0(1)調 AAS
>>439
ユーザープロセスなのでカーネル空間はマッピングされないよ。プロセス管理のための領域はカーネル空間に多少は確保されるとは思うけど、それはユーザープロセス用ではないし。
ページサイズの関係で効率的に確保できるかどうかは別問題だけど仮想メモリ領域いっぱいまで取れるか否かと言えば取ることはできる。
実際にそんなことしたらスワップ発生しまくりでまともに動かないとは思うけど。
452: (ワッチョイ 7fe9-3iRC) 2019/05/06(月)12:43 ID:53K/0wkW0(1)調 AAS
実装としてはだいたいcopy on writeだから、確保だけだったら特に問題発生しないよ
453: (ブーイモ MM3e-iz+S) 2019/05/06(月)16:08 ID:95XsbNbMM(1)調 AAS
>>451
どのOSなのか明示してくれ。
少なくともlinux 32bitは3GB以降はkernel空間にマッピングされてるだろ
454(1): (ワッチョイ 4321-QjK4) 2019/05/06(月)21:20 ID:lSipB+Y80(1/4)調 AAS
配列にある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);
よろしくお願いします。
455(1): (ワッチョイ f701-EPtf) 2019/05/06(月)21:29 ID:v87Zm/5a0(1/4)調 AAS
sscanf の %x は、文字列で記述された数字+アルファベットの列を 16進数として抜き出す
sscanf("10", "%x", &val); → val の値は 10進で16 となる
0xDC 0x18 の並びから どういう整数値にしたいんだろうか?
456(2): 454 (ワッチョイ 4321-QjK4) 2019/05/06(月)21:38 ID:lSipB+Y80(2/4)調 AAS
>>455
回答ありがとうございます。
val=0xDC18
という感じで取り出したいです。
457(1): (ワッチョイ f701-EPtf) 2019/05/06(月)21:40 ID:v87Zm/5a0(2/4)調 AAS
>>456 それなら
val = rbuf[5]; じゃあかんの?
458(1): 454 (ワッチョイ 4321-QjK4) 2019/05/06(月)21:50 ID:lSipB+Y80(3/4)調 AAS
>>457
ありがとうございます。そういうことか・・・
下記で上手くできました!
val= rbuf[5];
val = val << 8;
val |= rbuf[6];
459: (ワッチョイ f701-EPtf) 2019/05/06(月)21:54 ID:v87Zm/5a0(3/4)調 AAS
>>458 解決してよかったね
0xDC 0x18 の並びから
(最低でも32bit長の整数)0xDC18 が欲しかったということだね
460(1): (ワッチョイ f701-EPtf) 2019/05/06(月)21:55 ID:v87Zm/5a0(4/4)調 AAS
(俺がちゃんと >>456 を読めてなかった説 val=0xDC18 って書いてるやんけw)
461(1): (アウアウウー Sabb-vI8p) 2019/05/06(月)22:06 ID:NYoOX9LAa(1/2)調 AAS
>>454
> rbuf[5]の中身は「0xDC」
> rbuf[6]の中身は「0x18」でした。(printfで出力してみたところ。)
だったらそれはASCIIではないよね。
462: (アウアウウー Sabb-vI8p) 2019/05/06(月)22:08 ID:NYoOX9LAa(2/2)調 AAS
などと、ゆっくり書いていたら既に解決か・・・
463: (ワッチョイ 4321-QjK4) 2019/05/06(月)22:09 ID:lSipB+Y80(4/4)調 AAS
>>460
>>461
ありがとうございます。
お陰様で解決できました。
勝手にASCII、文字列と勘違いしていたのがよくなかったです。
464: (ワッチョイ e22c-4xtZ) 2019/05/07(火)06:48 ID:/Z9tG+PY0(1)調 AAS
ASCII は、7 bit キャラだろ
欧州文字コードなら、8 bitとか
465: (ワッチョイ 23d2-R0y6) 2019/05/07(火)15:31 ID:gGAOuhJk0(1)調 AAS
BASIC時代 文字→文字コード変換関数が ASC(文字) だったな。
466: (ワッチョイ d701-LHRJ) 2019/05/08(水)20:11 ID:w7dyIR3e0(1)調 AAS
逆はCHR$(コード)だったな。
467: (ワッチョイ 9b6d-ahOC) 2019/05/08(水)22:02 ID:LqpjdKM80(1)調 AAS
「なんで朝潮?」と思ってしまった当時の俺w
468: (ワッチョイ 7f7c-gMth) 2019/05/09(木)08:32 ID:IVg2TokP0(1)調 AAS
わらってよりとも というのは、当時の人気番組名をもじったものだよ
469: (ワッチョイ 9f35-AilG) 2019/05/09(木)12:40 ID:J26JobOx0(1)調 AAS
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
470: (ブーイモ MM9b-f8ez) 2019/05/09(木)20:40 ID:axmpki24M(1)調 AAS
「はじめてのC」なら買う
471: (ワッチョイ ff63-gMth) 2019/05/09(木)22:18 ID:fgRKvhjn0(1)調 AAS
その本の名前、買うときに恥ずかしいw
472(2): (ワッチョイ 9f79-ScLU) 2019/05/09(木)23:03 ID:vEdVh+9n0(1)調 AAS
質問です
文字列の配列
char matrix[Y][X]を関数に引数として渡して、渡した先の関数でtxtファイルに出力したい。
YとXはその時々によって違う値でmatrixは文字列の配列だけど1行ごとに'\0'が入っていないとき、渡した先の関数でYとXをどうやれば参照できますか?
例えば
matrix = {{‘a’, ‘b’, ‘c’}, {‘d’, ‘e’, ‘f’}};
みたいな配列です
473: (アウアウエー Sadf-NBbm) 2019/05/10(金)00:00 ID:IBOrEgMWa(1)調 AAS
X(配列のサイズ)を共有してやればいいんじゃないかな
474(1): (ワッチョイ ff63-gMth) 2019/05/10(金)00:14 ID:Ojl9YgLP0(1)調 AAS
>>472
matrixのアドレスと共にX、Yの値を渡さないと無理
475(1): (ワッチョイ bf02-XC4S) 2019/05/10(金)03:11 ID:+vHN15fT0(1)調 AAS
>>472
https://qiita.com/Hiraku/items/babed27bc1d750c2e12d
476: (ワッチョイ 9f79-ScLU) 2019/05/10(金)09:26 ID:bwAvNWKg0(1)調 AAS
>>474
やっぱり配列のサイズ一緒に渡さないとだためですか
477: (アウアウウー Sa1b-wdoq) 2019/05/10(金)09:44 ID:0Zlxa6bHa(1)調 AAS
そう。他の言語だと裏でこっそり渡すようになっていたりしてプログラムに書かなくても動くかも知れないが、Cはそこまでやってくれない。
478: (ワッチョイ ff69-PnGR) 2019/05/10(金)10:05 ID:hw8N8wYC0(1)調 AAS
標準関数も一次元配列ですら大きさを渡してるからねー
(文字列は '\0' が終端である という了解を持って大きさを不要にしているだけ)
479: (スップ Sdbf-63hD) 2019/05/10(金)12:34 ID:zZfQYrbwd(1)調 AAS
>>475
URL張って解党した気になってるアスペルガーのカスがスレ来んな
480: (ワッチョイ bf02-y0Vo) 2019/05/10(金)23:50 ID:svzEPJh90(1)調 AAS
え?読んでもわからなかったの?
481(1): (ワッチョイ d7f6-y0Vo) 2019/05/11(土)07:43 ID:glRpLuyC0(1/4)調 AAS
確かにつまらんね
リンクだけとかググレカスとか
せっかく掲示板にいるのに対話がないのは
482(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ bf3e-gMth) 2019/05/11(土)09:55 ID:GtXmrqj00(1/2)調 AAS
>>481
リンクを示すのも、ググればわかるようなことにググれというのも対話だよ。
対話を終わらせてるのはお前だろ。
リンク先を見て意味がわからんかったならどうわからなかったか、
よりよい説明があると思うならそれを示してもいい。
望むことだけ欲しいというのは対話とは言えんよ。
483: (ワッチョイ d7f6-y0Vo) 2019/05/11(土)10:34 ID:glRpLuyC0(2/4)調 AAS
>>482
話が噛み合ってない
おまえさんとは平行線のようだな
484(1): (ワッチョイ 57dc-y0Vo) 2019/05/11(土)11:46 ID:0ygzdBDA0(1)調 AAS
ID:glRpLuyC0が対話する気なさすぎて草w
485(1): (ワッチョイ ff63-gMth) 2019/05/11(土)12:23 ID:9iCvmH6s0(1)調 AAS
ここは質疑を行うスレであって
対話したり、雑談したりする場ではない
486(2): (ワッチョイ 9f2d-y0Vo) 2019/05/11(土)19:10 ID:HOBfdmGr0(1/2)調 AAS
Cの上位互換(?)として、C++がありますが。C++は覚えた方がいいですか?
もしくは、CとC++を両方覚えたら、Cは不要になり、C++でコードを書くようになりますか?
C++でできることはCでもできるように見えますので、ならCだけでいいようにも思えたり。
487(1): ◆QZaw55cn4c (ワッチョイ 9f47-vVMj) 2019/05/11(土)19:18 ID:KtHZQgR00(1)調 AAS
>>486
C++ は最近規格の改定がすすみ、いろんなことが C++ の枠内でできるようになりました
488(1): (ワッチョイ 375f-PSXp) 2019/05/11(土)19:21 ID:2v2BzL6t0(1)調 AAS
>>486
言っておくが、python,C++,Java,javascript,C#,shellでできる事はC言語でも出来る
更に君が作ろうとしてるものや、やりたいことは、もう誰かが作ってる
ましてや大規模になると、googleとかamazonと戦う羽目にもなる
それが嫌ならプログラミングなんて辞めとけ
489: (ワッチョイ 9f2d-y0Vo) 2019/05/11(土)19:32 ID:HOBfdmGr0(2/2)調 AAS
>>487-488
了解です、ありがとうございます
490(1): (ワッチョイ d7f6-y0Vo) 2019/05/11(土)21:07 ID:glRpLuyC0(3/4)調 AAS
>>484-485
482は反対意見を述べているという意味でまだいいところがあったが
てめーらは一方的な押しつけしか頭にない100%真のノイズだ
491(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ bf3e-gMth) 2019/05/11(土)21:28 ID:GtXmrqj00(2/2)調 AAS
>>490
既に解説があると示すのも質問に対する回答として十分だし、それで不満な理由がまるでわからん。
それが対話でないと断言するのも意味がわからん。
結局のところどうして欲しいの?
492: (アウアウウー Sa1b-wdoq) 2019/05/11(土)22:15 ID:YLmnNEXIa(1)調 AAS
きっと寂しいんだよ。
493(1): (ワッチョイ d7f6-y0Vo) 2019/05/11(土)22:49 ID:glRpLuyC0(4/4)調 AAS
>>491
意味がわからんからどうした?
平行線の相手に何か言って欲しいのか?
494(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ bf3e-gMth) 2019/05/12(日)10:19 ID:l86zXz3/0(1)調 AAS
>>493
そう決めつけて続きを拒むなら「一方的な押し付けしか頭にない」「対話がない」というまさにそれでしかなくね?
意味がわからんから解説してくれっての。
わからんことを理解する必要があるから対話になるんだろ。
495(1): (ワッチョイ d7f6-y0Vo) 2019/05/12(日)11:22 ID:VeGHf8Lz0(1/2)調 AAS
>>494
自分の言葉で何か言えよと思う俺の意見を
おまえ真っ向から全否定しただろ
だから接点がないと判断したんだ
接点があるなら最初の態度を撤回しろ
話はそれからだ
496(1): (ワッチョイ 9f52-tfUF) 2019/05/12(日)11:57 ID:7nn+3/Jt0(1)調 AAS
>>495
意見を全否定って、そりゃ異なる意見があるのは当然だろう。異なる考えなら議論にならないなんて、議論する気が無いだけだろう。
ついでだが、俺もお前さんの意見には反対だ。自分の言葉で書くかはまったく重要ではないと思う。お手軽に書ける掲示板のレスは言葉足らずだったり不正確な表現なことも多々あるが、それよりきちんと纏まった情報をリンクされた方がありがたいことも多い。
497: (ワッチョイ d7f6-y0Vo) 2019/05/12(日)12:19 ID:VeGHf8Lz0(2/2)調 AAS
>>496
意見が異なるのと全否定は違うぞ
自分はこう思うと述べるのと
おまえは間違っているというのの違いだ
よくいるんだよ、どっかからの受け売りを壊れたレコードみたいに繰り返すだけなやつとか
俺は自分の知見からは何も出てこないのかよと思うことがあるが
おまえはそれで満足なら勝手に満足してろよ
そこが俺とおまえの違いだな
498(3): (ワッチョイ 9f79-ScLU) 2019/05/12(日)15:34 ID:SbCKIsfP0(1/3)調 AAS
質問です
テキストファイルから文字を1文字ずつ読み込んでchar型の2次元配列matrixに入れていきたい。
この時改行は配列に入れたくないときどうすれば良いですか?
うまくいかないコード
for (i=0;i<10;i++) {
for (j=0;j<10;j++) {
if (fgetc(fp) == ‘\n’) {
continue;
}
matrix[i][j] = fgetc(fp);
}
}
テキストファイルは行数と列数があらかじめ分かってるとして
例えば
AAAAAAAAAA
BBBBBBBBBB
…
のようなファイルです
499(1): (アウアウカー Saeb-NBbm) 2019/05/12(日)15:51 ID:L7lYUohVa(1)調 AAS
fgetc二回呼びたいの?
500: (ワッチョイ d77f-hzJM) 2019/05/12(日)16:10 ID:7kDDqNbD0(1)調 AAS
>>498
continueだと内ループ先頭に戻るから違うんじゃないの
501(1): (ワッチョイ ff12-f8ez) 2019/05/12(日)16:24 ID:R31sKZyy0(1)調 AAS
>>498
.for ... {
. for ... {
. char c = fgetc(fp);
. if (c != '\r' && c != '\n') {
. matrix[i][j] = c;
. }
. }
.}
502: (ワッチョイ 9f79-ScLU) 2019/05/12(日)17:12 ID:SbCKIsfP0(2/3)調 AAS
>>499
呼ばなくていいです
>>501
これでもうまくいかないです
503(1): 経団連◆T6xkBnTXz7B0 (ワッチョイ 1701-PJeF) 2019/05/12(日)17:22 ID:uLUIsoqa0(1)調 AAS
for (i=0;i<10;i++) {
for (j=0;j<10;j++) {
matrix[i][j] = fgetc(fp);
}
fgetc(fp); //読み捨て
}
504: (ワッチョイ b77c-NBbm) 2019/05/12(日)17:29 ID:CrklWm7I0(1)調 AAS
変な例出すなよ…
505: (ワッチョイ 9f1e-bWAY) 2019/05/12(日)17:29 ID:gzai7Rgq0(1)調 AAS
サイズが固定なら fread でよくない?
そうすべきというほどのものでもないだろうが。
506: (ワッチョイ 577b-djxj) 2019/05/12(日)17:35 ID:x4ccFx6b0(1)調 AAS
>>498
「うまくいかない」症状を見れば、もう少し見当がつくんだけど…。
格納先の配列を char matrix[LINES][CHRS]; とか定義して、
printf("%s\n", matrix[n]); で表示してるの違うかな。
各行の文字列の末尾にあるべき '\0' が格納されてない、みたいな。
507(1): (ワッチョイ ff63-gMth) 2019/05/12(日)17:36 ID:JjryTeWM0(1/3)調 AAS
2重ループやめても良いか?
while (1) {
int c = fgetc(fp);
if (c == EOF) {
break;
}
if (c == '\n') {
continue;
}
matrix[i][j] = c;
j++;
if (j == 10) {
i++; j = 0;
}
}
508: (ワッチョイ ff63-gMth) 2019/05/12(日)17:38 ID:JjryTeWM0(2/3)調 AAS
501の方法だと'\n'読んだ時に、スキップしているけど
ループ変数の方は ++1 してるからズレてくる
509(1): (ワッチョイ 9f79-ScLU) 2019/05/12(日)18:35 ID:SbCKIsfP0(3/3)調 AAS
>>503
>>507
どちらも行けました
507のは理解できるんですが
503の読み捨てというのはどう言うことなのでしょうか
510: (ワッチョイ ff63-gMth) 2019/05/12(日)18:43 ID:JjryTeWM0(3/3)調 AAS
>>509
10個読んで1個捨てる
511: (ワッチョイ 3702-vVMj) 2019/05/13(月)20:38 ID:WOFscy660(1)調 AAS
バッファにつめるところを簡単にしてみた。
https://ideone.com/fJ91BI
512(4): (オッペケ Sr8b-lJiK) 2019/05/14(火)06:41 ID:7SLYc+Rqr(1/2)調 AAS
OSSで構造体を公開しようとおもってる
そのサイズをバージョンアップしても固定にしたいんだけどいいアイデアないかな?
struct foo {
int a;
double b; // ここをバージョンアップで追加
}
char[100] buffer;
上記を予め含めておいて、追加サイズ分だけ減らすってのがよくある手段だと思うけど、intや他の型が固定サイズの保証はないから、処理系をかんがえると使えない
パディングでサイズも変わっちゃうしね
C++ならテンプレートでいけるけど、OSSだから利用者が多いC言語で書いておく必要がある
構造体を公開しないで、ハンドラとセッタで扱えばいけるだろうけど、今回は構造体でいきたい
513(1): (ワッチョイ 9ff9-vVMj) 2019/05/14(火)08:01 ID:YNmKUGxB0(1)調 AAS
「sizeof(int)が環境依存」を前提にするなら
バージョンアップ以前のint a;だけでもう既にサイズ固定じゃないじゃん
int32_tですら必ずある保証はないよ
「汎用な記述で全ての環境に対応したい」ってのが、土台無理な注文なのよ
低レベルなことやるなら、サポートする環境を列挙限定しなければならない
素直に「よくある手段」でやりなさいってことだ
514(2): (アークセー Sx8b-Vhni) 2019/05/14(火)08:07 ID:0o/9QF7Tx(1)調 AAS
>>512
処理系によるパディングとかの問題を別にしたら、bufferをunionにしといたらわざわざ減らさなくても良いのでは?
515(2): (オッペケ Sr8b-lJiK) 2019/05/14(火)08:25 ID:7SLYc+Rqr(2/2)調 AAS
>>513
たしかにint aですでに違うね
ただ今回考えてるのは、コンパイルせずに共有ライブラリを差し替えるって状況を想定してる
そのときにセグメンテーションフォールトがでないようにしたい
だから、すべての処理系で同じサイズにしたいってわけじゃなくて、同じ処理系の中ではバージョンにかかわらずサイズを保ちたいってことなんだよね
説明不足ですまん
516: (アウアウエー Sadf-NBbm) 2019/05/14(火)08:36 ID:2RiYyx1fa(1/3)調 AAS
あらゆる環境だったらシリアライズしないとだし。
同じ処理系だったら同じ構造体でいいだろうし。
517(3): (ワッチョイ ff69-PnGR) 2019/05/14(火)13:41 ID:d9/Wmgv60(1/2)調 AAS
>>514 のはこんな感じですかの
union foo {
struct {
int a;
double b; // ここをバージョンアップで追加
};
char dummyBuffer[100];
};
518: (ワッチョイ ff69-PnGR) 2019/05/14(火)13:59 ID:d9/Wmgv60(2/2)調 AAS
構造体の大きさが char[100] に収まってる範囲での話
>>512 のように末尾に用意したギャップを引き算していくにしても、引ききれなくなった段階で破綻するよね
※ 突破したことをチェックするには sizoef(union foo) と sizeof(char[100]) とを比較すんのかなぁ…
519: 経団連◆T6xkBnTXz7B0 (ワッチョイ 1701-PJeF) 2019/05/14(火)14:09 ID:4po1tQ0w0(1)調 AAS
C99 <stdint.h>のuint*_t型を使った方がいいと思う。
520: (アウアウエー Sadf-NBbm) 2019/05/14(火)14:39 ID:2RiYyx1fa(2/3)調 AAS
普通符号付きでしょ
521: (ワッチョイ 7f7c-gMth) 2019/05/14(火)14:51 ID:5nOlmwWa0(1)調 AAS
符号プログラミングか
上下前次1-新書関写板覧索設栞歴
あと 481 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.035s