[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 15:17 / Filesize : 213 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131



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/

375 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 10:05:41 ]
そんな環境依存の話を書かれても

376 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 10:12:33 ]
つまり、このスレ的にはmalloc()の戻り値を検出するためだけのラッパは要らないということで。

377 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 10:23:45 ]
仕様的にはmallocの時点で割り当て失敗かどうか検出できないのってどうなの?

378 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 10:31:26 ]
WindowsもたぶんVirtualAlloc使うと、実際にアクセスするまで確保されない
ってこのスレじゃ関係ないね

379 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 11:49:59 ]
今ググても見つからなかったけど、俺が読んだ文章だと「近代的なOSだと、そういうふうになってる」みたいな言い方だったね。
mallic()で0を返さないって。

380 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 11:54:59 ]
マリックwwwww

381 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 15:47:16 ]
>>373
malloc()は、システムコールじゃないよ。libcの関数だよ。
わかってる?

382 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 15:58:38 ]
>>377
駄目。

malloc()の実装のサンプル(システムコールとの関係)はK&Rにも載ってるから
興味がある人は目を通して理解しておくと良いよ。
知ったかぶりすると恥ずかしいから。

Windowsで言うなら、
VirtualAllocは確保できなくても0以外を返すかもしれない(実際は知らない)けど
HeapAlloc(OSからもらったメモリを必要な分だけに区切って渡す)は
確保出来ないときは0(NULL)を返すということ。
(サイズ情報等を埋め込むから、必ず実際のメモリにアクセスする)
VC++なんかのmallocは、HeapAllocをそのまま呼んでるだけだし。

383 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 16:11:45 ]
www.linux.or.jp/JM/html/LDP_man-pages/man3/malloc.3.html
> デフォルトでは、Linux は楽観的メモリ配置戦略を用いている。つまり、 malloc() が
> NULL でない値を返しても、そのメモリが実際に利用可能であることが保証されない。
> これは本当にまずいバグである。
なるほど、確かにこれはバグだと言っている



384 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 16:19:02 ]
ヒント: 管理情報はアプリケーションに返すメモリブロックに隣接している必要はない
malloc()がどう実装されてるかなんてそれこそ環境依存以外の何者でもない
とはいえ利用可能でないのにNULLを返さないのは規格違反だろうな

385 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 16:23:15 ]
なるほど、
アドレス空間が足りない時等「一般的にmallocがNULLを返す状況」では無く、
システム全体(カーネルと各プロセス最小限使用分)の「物理メモリ」が不足する状況で
プロセスの存在そのものが抹消されるわけね。
それも、自分自身とは限らないプロセスが。

386 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 16:25:23 ]
とはいえ、どう考えても、これが「近代的なOS」と関係あるとは思えない。

「近代的なOS」が使っているのは、仮想記憶とデマンドページングだろ。
mallocが失敗してもNULLを返さないのとは関係ない。

387 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 16:26:27 ]
つまり、このスレ的にはLinuxのlibc(におけるmalloc()の実装)は間違いだということですね。

388 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 16:30:32 ]
Linuxはカーネルだけだから理論的にはまともな実装をしたlibcに置き換えることもできる。
glibcと言っておこう

389 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 16:31:52 ]
>>384
でも、とりあえず、manでヒープの破壊について触れているくらいだから
今話題のLinuxのglibcの実装に関しては、
確保したブロックの前後に管理ブロックがあると、仮定しても構わないでしょ。

390 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 16:33:25 ]
じゃあどういう状況でNULLを返さないことがあり得るんだろう。
アプリケーションに返すメモリがたまたまページ境界にまたがったときかな

391 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 16:38:02 ]
>>390
いや、>>385な状況で、実際に物理メモリが足りないと判明する時でしょ。たぶん。
ページ境界の可能性もあるけど、大きなブロックを確保して真ん中にアクセスした時とかも。

ていうか、この場合、メモリ不足が
「アクセスするまでわからない」じゃなくて「絶対にわからない」だな。
分かった瞬間に検出することも出来ないまま殺されちゃうんだから。
>>373の「NULLチェックが無駄かも」という結論は一緒かもしれないけど。

392 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 16:38:04 ]
あとページサイズを超える大きなメモリブロックを割り当てた場合
最初のページだけは管理情報の書き込み時点でコミットされるけど
2ページ目以降を踏んだとたん落とされる可能性がある

393 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 16:38:28 ]
2秒差でかぶったorz



394 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 21:09:29 ]
ハードウェアの制限で256の倍数でデータを書き出しを行いたいのですが
端数が出た場合の処理はどのように実現するのがスマートなのでしょうか。

データは必ずシーケンシャルに確実に書き込まれる必要があって困っています。
携帯開発辛い...



395 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 21:14:10 ]
>>394
言語と何ら関係がない質問なので、スレ違い。

まぁ、切り捨てていいなら切り捨てるし切り捨ててはいけないなら補うだけだな。
尤も、補う方法もダミーを詰めるだけでいいのか適当に間引く必要があるのか知らんが。

396 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 02:13:31 ]
>>394
許されるバッファサイズと
書き込みサイズ > 256
書き込みサイズ ~= 256
書き込みサイズ <<< 256
で, 解が 異なると思うんだが...


397 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 08:03:22 ]
>>396
馬鹿晒さなくていいから。

398 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 12:16:27 ]
n: アライメント
書き出しサイズ (data_size + (n-1)) / n * n

n が2の累乗数なら (data_size + (n-1)) & ~(n-1) で代用可能

399 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 17:27:09 ]
>>382
VirtualAllocがメモリの予約やコミットに失敗した時は
NULLを返すのは保証されてるよ〜

400 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 19:59:29 ]
完璧にスレ違いだけどな

401 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 04:35:16 ]
フラッシュの書き込みとかやったなあ、なつかしい

402 名前:デフォルトの名無しさん [2007/04/22(日) 23:30:12 ]
ファイルのサイズを取得する方法として
fseek()でSEK_ENDに移動して
ftell()の戻り値を取得する方法を使っていたんですが、
どこかのサイトに
「バイナリモードでファイルをオープンした時はSEEK_ENDの値が保証されない」
みたいな事が書いてありました
理由がよくわからないんですが、なぜなんでしょう

403 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 00:08:58 ]
その管理者に「日本語でおk」とメールしろ



404 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 00:10:45 ]
ISO/IEC 9899:1999 7.19.9.2 The fseek function / Para.3

3 For a binary stream, the new position, measured in characters from the beginning of the
file, is obtained by adding offset to the position specified by whence. The specified
position is the beginning of the file if whence is SEEK_SET, the current value of the file
position indicator if SEEK_CUR, or end-of-file if SEEK_END. A binary stream need not
meaningfully support fseek calls with a whence value of SEEK_END.

だそうだ、詳しくは知らない

405 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 00:11:27 ]
>>402
SEEK_ENDの値が保証されない
でググって最初のやつ

406 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 00:24:42 ]
>>402
takagi.in/modules/xoopsfaq/index.php?cat_id=1
このページか? 大嘘だから無視していい

The fseek() function sets the file position indicator for the stream
pointed to by stream. The new position, measured in bytes, is obtained
by adding offset bytes to the position specified by whence. If whence is

...

The fgetpos(), fsetpos(), fseek(), ftell(), and rewind() functions con-
form to ISO/IEC 9899:1990 (``ISO C90'').


407 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 00:31:34 ]
ファイルサイズをバイト単位で管理しないファイルシステムがあった大昔のためだろ。
テキストファイルはファイル終端を表すEOFコードを書き込んでいたが、
バイナリファイルではそうもいかないため終端へのシークができない
(あえてやるとすればブロックなどといったもう少し大きな単位での終端までいってしまう)
ということのはず。

408 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 05:10:49 ]
>406のページは他にも嘘が……

409 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 05:26:59 ]
>>407
CP/Mがそんなだったかな。
EDLINEとかDOS用のエディタでテキストファイルを作ると最後に^Zが付くのはその名残。

410 名前:デフォルトの名無しさん [2007/04/23(月) 19:21:07 ]
副作用完了点について質問があります。

1) どこだったか忘れてしまったのですが、ネット上の文書で
「カンマ演算子はインクリメント/デクリメントの副作用完了点にならない」
というような記述を読みました。これは正しいのでしょうか?
i++, i++; としてはならないと書いてありました。

2) int *f(int *p) { return p; } という関数があったとして、
以下の例は合法でしょうか?
int i;
*func(&i) = 1;
*func((++i, &i)) = 1;

3) 関数 int g(int); について、式 (++i * g(++i)) の 二つの ++i の評価される順序や、
式 (g/*1*/(i) + g(g/*2*/(i))) で g/*1*/ と g/*2*/ が呼ばれる順序は定義されていますか?

よろしくお願いします。

411 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 19:54:58 ]
++i と i++ で処理が変わるようなプログラムは
今の時代書くべきじゃない。

412 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 19:56:19 ]
++i や i++ を何かに突っ込んだプログラムもな。
a[i++] = b; とか。
読みやすいプログラムを書け。

413 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 19:57:42 ]
>>411,412
なんで乞われてもいないのに語りだすん?



414 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 20:08:42 ]
引数を列挙する時のコンマは副作用完了点にならないけど、
コンマ演算子は副作用完了点になるはずだと思うんだけど。

415 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 21:05:46 ]
論理積 (&&)、論理和 (||)、カンマ演算子 (,)、三項演算子 (?:) の評価順は左から。
その他の演算子は不定。なので
1) は「正しくない」
2) は「合法」
3) は「定義されていない」

>>413
>>411-412 は、今何の話をしているかをまったく理解できていないものと思われる。

416 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 21:27:43 ]
でも、よく下のような使い方は見るよね

int a,b

for(i=0;i<10;i++)
{
  *a++ = *b++;
}

417 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 21:43:38 ]
>>416 それがどうした?

418 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 21:47:41 ]
>>416
見ないし、見たくない。

419 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 22:15:36 ]
>>416
以下を、突っ込んで欲しい順に並べてください。
ア・「でも」は何処に掛かってんだ!?
イ・更に話題を発散させるつもりか!?
ウ・aとbはポインタちゃうやろ!!

420 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 22:20:26 ]
>>419
ウ・aとbはポインタちゃうやろ!!
ア・「でも」は何処に掛かってんだ!?
イ・更に話題を発散させるつもりか!?


421 名前:402 mailto:sage [2007/04/23(月) 22:26:44 ]
みなさん回答ありがとうございます

> A binary stream need not meaningfully support fseek calls with a whence value of SEEK_END.

という事は厳密には移植性が無いって事でいいんですかね

と思ったんですが

>>406 マジすか?混乱してきました
>>408 後学のためにどこか教えていただけますか?

422 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 22:44:09 ]
>>421
例えばこの辺。
> Linux などの Unix 系 OS の環境では、テキストモードとバイナリモードの区別がないという表現がよく見受けられますが、
>それはあくまでもナロー文字を扱っている場合のことであり、ワイド文字を扱う場合には当てはまりません。
>また、たとえ Unix 環境でナロー文字しか扱わない場合であっても、移植性の高いコードを書くには、
>テキストモードとバイナリモードを等価なものと考えてはいけません。

ここを見れば判るが、POSIXではそもそもそんなモードがない。
>ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/fopen.3.html

423 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 00:44:29 ]
カンマ演算子について、

while ((c = getchar()) != EOF) {}
なんて書き方を良く見るが、たまに
while (c = getchar(), c != EOF) {}
の方が分かりやすい人も居るんじゃないかと思ったりする。
(優先順位等が分かっている人には)

ただ、K&R等で上の書き方が使われているし、
一般的に「慣れている方が分かりやすい」という観点からは
やはり上の形なのかな、と思う。
K&Rで上の形式なのは、大昔の非最適化コンパイラの都合もあるだろう。



424 名前:デフォルトの名無しさん [2007/04/25(水) 15:10:10 ]
dirent_t構造体のメンバ変数でd_typeというのがあるのですが、
これの示す値がどのように定義されているのかが分かりません。

とりあえず実際に動かして調べてみたところ、
ファイルの場合は8、ディレクトリの場合は4が入ってくるようなのですが、
他にも何か値が入ってくる場合があるのでしょうか?

御教授ください

425 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 15:14:06 ]
sys/stat.h

426 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:11:37 ]
>>423
確かにカンマ演算子使うのはいいかもな、
ま、俺もどうせ今更だから使わないけど

427 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:31:06 ]
>>423
下の方が分かりやすいとは思うんだけど、
c を2回書かないといけない点は気持ち悪い。
悩ましいところ。

428 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:49:49 ]
すみませんお願いします。
scanfで10桁までの数字を入力し、その10桁の数字を配列に格納するにはどうしたら良いでしょうか?
こんな感じの↓問題なのですが、お願いします。

1.10桁までの任意の数字を入力し、入力した値を配列に格納し、
「何桁目を表示しますか?」を出力し1〜10までの任意の数字を入力後
「○○桁目の数字は○です」と出力されるプログラムを作成せよ

ググってもわからないし、全然できないです…orz
どなたか解いてください。

429 名前:428 mailto:sage [2007/04/25(水) 22:52:19 ]
あ、使用しないとならない関数はscanf printf switch case になります。

430 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 22:52:36 ]
宿題スレにいけば教えてくれるよ

431 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 10:21:10 ]
出題者にswitch case は関数じゃない、とつっこんどけ

432 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 13:57:29 ]
while (GetChar(&c) != EOF) {}

でええやんw

433 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 14:03:40 ]
なんですかそれは



434 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 14:33:14 ]
int pos,list[10];
setNum(&list[], sizeof(list));
pos=getPos("何桁目を表示しますか?", sizeof(list));
printf("%d桁目の数字は%dです\n", pos, list[pos] );

こんな感じでおk


435 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 15:20:44 ]
setNumとかgetPosって何やねん

436 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 15:37:00 ]
setNum()
配列サイズの個数の任意の数字を入力し、入力した値を配列に格納

getPos()
メッセージを出力し1〜サイズ以下の任意の数字を入力させ、それを返却

437 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 16:24:15 ]
標準Cにそんな関数あるのか?

438 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 16:42:57 ]
無いなら作れ

439 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 16:46:46 ]
最初から「宿題は自分でやれ」でええやん

440 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 20:09:57 ]
御教授ください

とありましたが、「御教示ください」と言ふべきです。

441 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 22:21:30 ]
「あいにくですが教授の知り合いはいません」と答えておけばいい

442 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 22:25:40 ]
「教えたまえ」でいいじゃん

443 名前:デフォルトの名無しさん mailto:sage [2007/04/30(月) 19:09:20 ]
はらいたまえ、きよめたまえ



444 名前:デフォルトの名無しさん [2007/05/01(火) 17:07:22 ]
質問です、プログラムAから別のプログラムBを立ち上げて、
Bの出力する標準出力はディスプレイに出さず全てAが受け取り、
Bが行うscanfなどの標準入力要求時には、すべてAから入力を与えるようにするにはどうすればよいでしょうか。

system,popen等の関数を調べたのですが、実現できません。
一見popenで出来るかと思いきや入力か出力のどちらかしかできないようで困ってます。

手順やキーワードだけでも結構ですので教えてもらえませんでしょうか。

445 名前:gost mailto:xiaotin511@yahoo.co.jp [2007/05/01(火) 17:22:26 ]
符号なし 32bit の変数 a と b があります。
>>
unsigned long a;
unsigned long b;
a と b には任意の値が格納済みであるとして、加算するとオーバー
フロー(0xFFFFFFFFを超える)の場合、"Overflow"、オーバーフロー
しない場合、"(a+b) OK" を出力するプログラム 教えてください
条件:
if((a + b) > 0xFFFFFFFF) の判定は使えません。
if((a + b) <= 0xFFFFFFFF) の判定は使えません。
a と b を加算してはなりません。

446 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 17:32:29 ]
>>444
popenの第2引数に"rw"使えなかったっけ
あとはforkで起動してパイプつなぐとか

447 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 17:43:29 ]
>>445
宿題臭いな。宿題スレに行けば。

448 名前:gost mailto:xiaotin511@yahoo.co.jp [2007/05/01(火) 17:46:03 ]
thanks



449 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 17:51:05 ]
昔、if (x || y || z) よりも if ((x | y | z) != 0) の方が
速くなる可能性がある(コメント必須)という話があったが

if (memcmp(p, "924", 3) != 0) より
if (p[0] != '9' || p[1] != '2' || p[2] != '4') より
if ((p[0] ^ '9' | p[1] ^ '2' | p[2] ^ '4') != 0) の方が
速くなる可能性もあるのかな。(コメント絶対必須で)
もちろん、ショートサーキットの起こる率によっても違うだろうが。


まあ、このケースに限れば(バスエラーが起きない状況なら)
if (*(DWORD *)p & *(DWORD *)"\xFF\xFF\xFF" == *(DWORD *)"924")
の右2つを整数定数に変えたものが最速か。
もちろん、このコードは移植性も無いし可読性もない
最悪のコードではあるのだが。

450 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 17:51:27 ]
stdioのFILE系で読み書きを同時にするのはトラブルの元だって
たしかrubyの人が言ってた気がする。

451 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 18:00:03 ]
宿題の答えとしては条件に合わない方法

unsinged long c = a + b;
if(c < a) {
 puts("Overflow");
} else {
 puts("(a+b) OK");
}

∵)
オーバーフローしたとすると、
c = a + b - m (m = 0x100000000)
c >= a だと仮定すると b >= m となるが、b < m なので矛盾する。
従って、オーバーフローした場合は必ず c < a となる。

逆に、オーバーフローしていない場合に
必ず c >= a になるのは自明。

∴ c < a ならばオーバーフローしている。

452 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 18:06:40 ]
>>449
分岐は基本的にコストが高いから
分岐が少ない方が速くなる可能性はあるけど、
どのくらい速くなるかは
環境と実行条件によるとしか言えない。
だから、よく使われると想定する環境下で実測するしかない。

ただ、よほどじゃないと問題にならない程度の差しかないと思うけどね。今の時代。
数兆周のループの中に入ってるとかでもない限り。

453 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 18:32:01 ]
a > 0xFFFFFFFF - b
ではいかんか?



454 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 18:47:24 ]
氏ね

455 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 19:25:10 ]
>>445
Hacker's Delightの2-12でも読めば?

456 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 20:51:40 ]
リモートの機器から日、時、分、秒を取得して、
ローカルの日時から、年月を補ってtime_t型通算病
(所謂UNIXタイム)を求めたいのだけど・・

単純にtime, localtime, mktimeで作ると、月替わりタイミングでバグるよね。
スマートなやり方があった気がするが・・思い出せない、おながいします。

※リモートとの時刻誤差は数分以内程度を想定してます。



457 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 20:55:26 ]
日が違ってる場合に年月の補正をすればいいんじゃない?

458 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 23:47:23 ]
C言語の問題じゃねー気がするが
日が取得できるのならそれをつき合わせて補正でイナフ

459 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 00:24:31 ]
年が今年なら、年月日だけあわせて0時の通産を求めて時分秒足したら

460 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 01:02:14 ]
>>451
このスレ的には加算を禁じる理由は何もないからいいんじゃね

461 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 01:23:14 ]
>>457-459
サンクス、思い出した。言語は関係ないな、こんなイメージで、ぶちこんどいた。

time_t now = time(0);
struct tm local = *localtime(&now);
time_t adjust = (local.tm_mday - remote->tm_mday) * (24 * 60 * 60);
if (adjust > issenwokoeta) {
  throw new AdjustOverflowException();
}
local.tm_mday = remote->tm_mday;
local.tm_hour = remote->tm_hour;
local.tm_min = remote->tm_min;
local.tm_sec = remote->tm_sec;
return mktime(&local) + adjust;



462 名前:444 のものです。 [2007/05/02(水) 02:04:03 ]
あるプログラムから別のプログラムから立ち上げて、
その標準入出力を掴むプログラムを作っていたものです。

その呼ばれたプログラムのstdin,stdoutを呼び出し元プログラムで制御するまでに一立ったのですが。
仮にsshやftpを立ち上げてみると、ログインパスワード入力時の
「Password:」 の表示が標準出力じゃないみたいで、
呼び出し元プログラムを通さず、画面に出てきてしまいます。

一体何故でしょうか?

463 名前:462訂正 [2007/05/02(水) 02:04:43 ]
>あるプログラムから別のプログラムから立ち上げて、

あるプログラムから別のプログラムを立ち上げて、




464 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 02:41:30 ]
>>463
スレ違い。

465 名前:デフォルトの名無しさん [2007/05/02(水) 03:03:04 ]
んじゃ別のところで;^^)

466 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 04:58:46 ]
つ【stderr】

467 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 09:34:10 ]
パスワード系はエコーバックもあれしてるからなあ

468 名前:デフォルトの名無しさん mailto:sage [2007/05/02(水) 11:25:37 ]
つ/dev/tty

469 名前:デフォルトの名無しさん [2007/05/03(木) 04:12:22 ]
話ぶった切って悪いんですがILP64環境で4バイト長の整数を使いたいときってどうなるの?

470 名前:デフォルトの名無しさん mailto:sage [2007/05/03(木) 04:23:57 ]
C99 ならこれが使えるんじゃないかと思うけど、どうだろう?
ttp://seclan.dll.jp/c99d/c99d09.htm#dt19990621

471 名前:デフォルトの名無しさん [2007/05/09(水) 11:36:43 ]
ヘッダにコードを書いてはいけないと聞いたのですが
何かあるのでしょうか?
別に書いても動きますよね?

472 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 11:42:37 ]
動く事は動くが再利用性やコードの見通しが悪くなるからあんまり書かない方がいい

473 名前:デフォルトの名無しさん mailto:sage [2007/05/09(水) 11:55:36 ]
>>471
規格の 6.9 External definitions で、一つの関数または変数に対する定義は
プログラム全体で一つ以下(使われなければ無くてもいい)と制限されている。
ただし inline 関数や初期化子の無い外部変数定義は例外。

ヘッダは複数のコンパイル単位に取り込まれるので、うかつに関数や変数の
定義を置くとプログラム全体としては同じ名前に対する定義を複数持ってしまう
ことになり、未定義動作となる。

現行の一般的な処理系では、この規則に反するほとんどの場合がリンク時に
「重複した定義」などのエラーとして報告される。



474 名前:デフォルトの名無しさん [2007/05/09(水) 12:03:53 ]
>>472 473
なるほど、わかりました。
ありがとうございます。

475 名前:デフォルトの名無しさん [2007/05/09(水) 13:41:50 ]
3次元配列を使ってプログラムを組んだんですが、これをポインタを使ったプログラムに書き換えたいです。
簡単な方法があれば教えて欲しいです。
いまいちポインタが分かってないもんで、よろしくお願いします。
3次元配列は、2000*2000*2000の配列です。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<213KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef