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


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

【初心者歓迎】C/C++室 Ver.41【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:26:08 ]
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.40【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1184717430/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

75 名前:デフォルトの名無しさん [2007/08/08(水) 05:24:03 ]
while (str != null) {
hoge
)
みたいな関数についてなんですが、
なんでstr != nullで動くんですか?
文字列の終わりはnullじゃなくて、¥0じゃないんですか?
nullは無効なメモリアドレスで、
¥0とは違う意味じゃないんですか?

76 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 05:37:27 ]
違う意味だね。
だから、文字列の終わりを判定するコードじゃないんだろう。

77 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 05:45:48 ]
>>75
strは文字配列へのポインタで、
まさにstrが無効なメモリアドレスでない間ループを回すコードじゃないのか?
strの型を確認してみるんだ。

78 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 07:07:03 ]
もし
#define null '\0'
であれば、件のコードは
while (*str != null) {...}
のはずなので、ほぼ間違いなく「正しいコード」だろう。
ただ、nullではなくNULLだろうな。

79 名前:デフォルトの名無しさん [2007/08/08(水) 08:34:24 ]
>>76
>>77
>>78
わかりました!

80 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 09:04:05 ]
在宅アルバイトならチャットレディがオススメ。
はっきり言ってこんなに楽で自由で高収入のアルバイトは
ありません。私も経験者ですので自信があります。
下記のサイトに詳しく説明してあります。
www2.atpages.jp/nicl1216/


81 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 09:28:53 ]
36歳独身男性でも応募できますか?

82 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 10:33:24 ]
86歳♀ですが応募できますか?

83 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 10:48:59 ]
21歳独身男性結婚する気なしでも応募できますか?



84 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 13:25:12 ]
>>81
見た目と声がレディなら、アソコはどうなっていても構いません。

>>82
86歳はルックスの面で少し厳しいと思いますが、
熟女の魅力と魅力的な声があれば大丈夫かと思います。

>>83
年は関係ありませんし、結婚願望はない方が好ましいですね。
ただし、見た目と声は(´∀`*)でないとダメです。

85 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 13:25:38 ]
3チャイです。キリンさんが好きです、でもゾウさんの方がもぉっと好きで〜す♪

86 名前:DEFORTの名無し [2007/08/08(水) 20:27:50 ]
ちょっと質問したいんだがどこかのサイトに無料のCのコンパイラないかな
知っている人がいたら教えて♪

87 名前:DEFORTの名無し [2007/08/08(水) 20:30:16 ]
これはスレちがい?

88 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 20:32:36 ]
MinGWとかVisualC++2005ExpressEditionとか

89 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 20:49:29 ]
gcc

90 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 20:51:20 ]
OSくらい書こうや
WindowsXP?

91 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 21:05:57 ]
>>86-87
あほすぎで笑うとこですよね?

92 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 21:14:13 ]
DEFORT じゃなくて DEFAULT だよな

93 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 21:17:27 ]
W



94 名前:デフォルトの名無しさん [2007/08/08(水) 23:24:39 ]
いくつかのC言語の初心者向けの書籍をいくつか読んで気になった事があるのですが、
%d や %s などの呼び方が書籍によって「変換指定子」や「変換仕様」と違い、
どんな条件で変わっているのか調べても判らず困っています。
これはどちらか間違っているのでしょうか?

95 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 23:29:51 ]
「変換指定子」は d とか s とか変換方式を表す文字のみを指す。
「変換仕様」や「変換指定」は % で始まり「変換指定子」で終わる全体を表す。

96 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 23:34:13 ]
>>94
あなたが間違っています。

97 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 23:35:23 ]
OS:RHEL4
言語:C
やりたいこと:
#include <openssl/sha.h>
unsigned char *SHA1(const unsigned char *d, unsigned long n, unsigned char *md);

こいつを使いたい。

これって、.soに定義されてないの?/usr/lib/libssl.aにしかない?

EVP_xxxを使うべきなのか。。。

98 名前:94 mailto:sage [2007/08/08(水) 23:41:28 ]
>>95
ありがとうございます、助かります。

99 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 23:48:46 ]
>>97
www.ipa.go.jp/security/rfc/RFC3174JA.html

100 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 23:54:48 ]
>>99
情報アリガト。
でも、これってRFCで示されたSHA1の実装例ですよね?
RHEL4の標準ライブラリで実現できないかなーと思っているのです。
opensslコマンドや、sha1sumコマンドで実現できるのは分かっているのですが、
自プロセス内で、標準(?)関数を使ってSHA1のハッシュ値を得たいのです。

ワガママですみません。

101 名前:97 mailto:sage [2007/08/08(水) 23:57:40 ]
追記。
libssl.aをリンクすれば良いのですが、
libgnutils-openssl.soとかあるので、共有ライブラリで何とかならんのかなーと。


102 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:03:41 ]
わざわざ面倒なことしてライブラリ使わんでも、それコピって使えばいいと思うが・・・
こだわる理由がわからん。

103 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:04:36 ]
ソースがでかくなるのやじゃないですか?



104 名前:デフォルトの名無しさん [2007/08/09(木) 00:06:30 ]
sha.h みつけた
mist.suenaga.cse.nagoya-u.ac.jp/document/sha_8h-source.html

105 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:08:29 ]
>>104
C++っすね。。。

ちなみに、偉大なるgoogle先生によると
www.google.co.jp/codesearch?q=package%3Asha1&hl=ja

この辺が出てくるのですが。。


106 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:10:05 ]
>>103
1個のファイルに全プログラムを書いてるとか?

107 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:18:55 ]
>>106
いえいえ。
もし既に標準ライブラリとしてRHEL4で提供しているのであれば、それを使った方が良いと思ってるのです。
javaでもメッセージダイジェストのクラスjava.security.MessageDigestがありますし。
できれば標準で提供されているものに乗っかりたいかなと。

Cとjavaではそもそも思想が違うと言われたらそうかも知れませんが。。。

108 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:23:16 ]
変態!変態!変態!!

109 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:30:48 ]
>>108
そう?

110 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:33:06 ]
すみません、どなたか教えて頂けないでしょうか。
C言語で、以下のものを作成したのですが、

int *name[] = {
"satou",
"takahashi",
"suzuki",
};

この時に*name[]に入った配列の数を知るにはどうしたら良いでしょうか。
(上記の場合、自分では「それぞれの文字列の先頭のポインタが3つ入っている」という認識です)


111 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:33:42 ]
sizeof name / sizeof name[0]

112 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:37:03 ]
>>111
配列の数を知る事が出来ました。
ありがとうございます。


113 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:38:10 ]
えっと、なぜint *?
char * name[] = { "hoge", "hogehoge", "hogehogehoge" };
sizeof ( name ) / sizeof ( char * )で3が得られる。



114 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:38:47 ]
int *の配列なのが気になるが・・・
char *じゃ無くて?

[mona@fedora7 tmp]$ cat test.c
#include <stdio.h>
int main(int argc, char **argv){
int *name[] = {
"satou",
"takahashi",
"suzuki",
};

printf("%d\n", sizeof(name) / sizeof(int *));

return 0;
}

[mona@fedora7 tmp]$ gcc test.c
[mona@fedora7 tmp]$ ./a.out
3


115 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:39:46 ]
みんな、簡単な問題だと思って、レスが早いよ!!

116 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:41:55 ]
別スレに来たのかとおもた

117 名前:110です mailto:sage [2007/08/09(木) 00:47:09 ]
自分の認識ではname[]へは、
[satouへのポインタ]
[takahashiへのポインタ]
[suzukiへのポインタ]

でしたので、数が増えた場合の事を考えて、
int型で宣言した方が良いと思い、
int型で宣言しました。

この辺りが曖昧でして。申し訳ありません。


118 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:50:06 ]
皆様突っ込みどうぞ

119 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:52:05 ]
>>117
数がいくら増えようが、char *もint *も必要とするメモリは変わりない。
ってか、name[]に256を超えるポインタを格納することを考えてintにしたのか?
だとしたら激しく勘違いしているぞ。

120 名前:100です mailto:sage [2007/08/09(木) 00:54:21 ]
すみません、ソース見てみたらchar型で宣言してました。
int型に変更してコンパイルしてみたところ
大量のwarningが出ました。
(エラー内容:warning initialization incompatible pointer type)

お騒がせして申し訳ありません。


121 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:56:05 ]
>>117
ポインタが指し示す値の型がintならint*を使うしcharならchar*を使う
指し示した先の型が表せる値の範囲は違ってもポインタ自体のサイズはint*でもchar*でも同じ

122 名前:110です。 mailto:sage [2007/08/09(木) 00:58:30 ]
↑すみません>>120 = >>110です。
char型の配列を、
name[] ={...}内に入っている分を確保するという事で良いでしょうか。


123 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 00:59:34 ]
"satoru"
は、文字列リテラルと呼ばれるものです。環境にもよりますが、
書き込み不可のメモリ領域に確保されます。
で、これはchar型の配列、末尾が'\0'として表現されています。
なので、
char *name[] = {"satoru", "takahashi"."suzuki"};
の意味は、
1.書き込み不可領域に確保されている"satoru"、"takahashi"、"suzuki"の3つの文字列リテラルがある。
2.要素数3、でchar型へのポインタの配列(name)がスタック(?)に確保され、各ポインタは、
  1.の"satoru"、"takahashi"、"suzuki"それぞれの先頭の一文字のアドレスを指すように初期化される

です。

117はCにおける文字列の表現方法について基本が分かっていません。がんばってちょ。
基本を理解するのは意外と難しいです。



124 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 01:01:07 ]
違う。char *を{...}の中にある要素数だけ配列として確保する。
だから、下の二つはnameで確保するメモリは同じ。
char * name[] = { "a", "b" };
char * name[] = { "aaaaaaaaaa", "bbbbbbbbbb" };


125 名前:110です mailto:sage [2007/08/09(木) 01:15:45 ]
皆様へ

丁寧なご説明ありがとうございます。
ずっとこの部分でエラーを吐いていて、
うまく動かず悩んでいたのですが、やっと動きました。
どうしてエラーが出ていたのかも理解できました(と思います…)。

ありがとうございました。


126 名前:46 mailto:sage [2007/08/09(木) 04:02:22 ]
>>61書き込みを遅くなりまして申し訳ありませんでした。
>>始めに出力した内容がDOS窓を上にスクロールしてもみえません。とか?
そのとおりです。何か対処法がありましたらぜひ教えてくださいよろしくお願いします。


127 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 04:06:27 ]
どんだけ〜

128 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 07:55:37 ]
>>126
所謂DOS窓を縦に引き伸ばしてみては如何でしょうか。
或いは、リダイレクトでファイルに落としてエディタで見るとか、
パイプラインでmoreに繋いで見るとか。

って、どう見ても言語ネタじゃないね。

129 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 11:02:45 ]
>>97
うちのUbuntu系のLinuxには /usr/lib/libssl.so があるんだぜ。


130 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 11:34:48 ]
>>126
ワロタwwプログラミング以前の問題だなw

131 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 13:18:07 ]
左上のアイコン右クリック>規定値>レイアウト>画面バッファのサイズ>高さ を増やすとか

132 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 13:22:16 ]
>>126
出力をテキストファイルにリダイレクトするとか

bcc32 -Etest.txt test.cpp > result.txt

133 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 16:49:44 ]
ファイル入出力で質問です。
ファイル保存のダイアログを出して、適当なところに保存して
また別にfopen("test.txt", "w");
で保存すると、保存ダイアログが出てたフォルダに保存されてしまうのですが
これを、実行ファイルと同じフォルダに保存するようにしたいんですけど
どうすればいいでしょうか?



134 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:13:51 ]
カレントディレクトリを実行ファイルのあるディレクトリにすればいいんじゃないの?

135 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:20:44 ]
>>133
つまりユーザはダイアログで保存ディレクトリも含めて保存先を指定したのに
それを*無視*して実行ファイルと同じディレクトリに*無理やり*保存したい
ってこと?

ユーザ権限について調べてみるといいと思うよ
Unixは言うに及ばず、WindowsであってもVistaでは厳しくなったようだから

136 名前:135 mailto:sage [2007/08/09(木) 17:24:09 ]
ああ、
> また別にfopen("test.txt", "w");
> で保存すると、
と書いてあるから、ユーザに指定させたのとは無関係に、プログラムが
勝手にこしらえるファイルの話か?
だったら、自分で実行ファイルのディレクトリを取得して、
フルパスで指定汁。カレントがどこだか分からないのだから。

とは言え、パーミッションには注意。Unixならもともとそういう設計は論外な。

137 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:27:59 ]
>>134
>>135
アドバイスありがとうございます。
ダイアログで保存するものと、fopenで保存するものは別のものなんです。
ただダイアログを出さないで保存したいなと思いまして。

ただ単に、fopenのみのプログラムだと実行ファイルのところに保存できたのですが
ダイアログ→fopen の順序で実行したらダイアログで保存したフォルダに一緒に保存されてしまったんです。

カレントディレクトリを実行ファイルのあるディレクトリにすればいいとは思ったんですけど
やり方がわかりませんでした。

138 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:29:46 ]
GetModuleFileName()でexeのファイル名を取れ

139 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:31:32 ]
>>133
OFN_NOCHANGEDIR

140 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:32:31 ]
int main(int argc, char *argv[])
ってやると、argv[0]に実行ファイル名が入るよ

141 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:37:02 ]
>>140
この場合、そのことに何の意味が?
まさか、argv[0]に必ずフルパスが入っているなんて能天気なことを想像してたりしませんよね?

142 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:44:13 ]
>>141
フルパスが入るようにコマンドラインを入力するんだよ
大丈夫か?

143 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:45:26 ]
>>142
アプリの都合でアプリの存在するディレクトリにこしらえるファイルのために
何でユーザがアプリの起動方法を指図されなければならないのだろうか



144 名前:133 mailto:sage [2007/08/09(木) 17:48:56 ]
みなさんありがとうございます。

>>139さん
のやり方で解決いたしました。
他にも色々な案を出してもらったので一つ一つ試していきたいと思います。

ありがとうございました!


145 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:49:28 ]
argvやカレントディレクトリに仮定を置くのは糞デザイン

146 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:50:46 ]
>>144
それじゃ、カレントがexeのディレクトリと同じじゃないと
意味無いよ。確実にexeが存在するのと同じ場所にファイルを作りたいなら
フルパス指定するしかない。

147 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:58:50 ]
GetModuleFileName()でフルパスを得て
_splitpath()で分解して
sprintf()で結合とかどう?

148 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:09:56 ]
ダメ

149 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:23:43 ]
exeと同じフォルダに書き込もうとか思っていると、
VistaのUACではまるかも。

そこに至るまでの道のりは長いだろうけどね。

150 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:29:17 ]
何をさも自分が苦労したからって

151 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:38:38 ]
>>150
北極行くのに南極経由するような人なんだから触れてやるな

152 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:56:11 ]
>>150
「さも」の使い方がおかしい

153 名前:133 mailto:sage [2007/08/09(木) 19:02:17 ]
すいません。だめでしたね。
>>147
の様な処理で分解してstrcatで結合して
それっぽい動きになりました。



154 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 19:50:02 ]
ファイルダイアログで選択して別ファイルに保存、、、
C#のスレでまったく同じ質問があったな、しかも同じ日
どっかの課題かなにかなのだろうか

155 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 19:51:14 ]
ただのマルチだろ

156 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 20:16:59 ]
いや、だって言語違うぜ?

157 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 20:17:54 ]
右も左も分からないんだろう

158 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 20:21:21 ]
うーん、向うはC#のソース出してたし
解決の仕方も解決した時刻も違うから
同じ人とは思えないなあ
質問者に種あかししてほしいとこだが

159 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 20:36:30 ]
ファイルダイアログなんてよくある質問じゃん。

160 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 20:40:44 ]
全部同じ奴だろ

161 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 23:17:50 ]
包茎を短時間で修正するプログラムの
開発って難しいですか?

162 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 23:21:06 ]
包茎と短時間と修正の定義次第

163 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 01:35:49 ]
いつから配列の定義の要素数に変数が使えるようになったん?
99年から?
void func(int n){
 int array[n];
 :
}
とか。。。



164 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 01:36:20 ]
C99 から

165 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 01:37:50 ]
やぱり。即レスども。
個人的にはその仕様はうれしい。

166 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 01:44:37 ]
>>165
ここを参考
seclan.dll.jp/c99d/c99d04.htm#dt19990719

167 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 01:49:43 ]
longjmpするとリークする可能性があるから、気をつけたまへ

168 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 08:39:01 ]
C99とC/C++は互換性無いから別スレに分けた方がいいと思う。

169 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 08:51:48 ]
可変引数マクロは非C99処理系にも是非輸入して欲しい

170 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 09:01:38 ]
素直にC99使えば

171 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 09:01:53 ]
>>168
C と C++ 用にそれぞれ専用スレがあるだろ。問題があれば誘導すればいい。

172 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 09:18:08 ]
stringstreamに、ファイル(ifstream)の中身を書くよい方法はありますか?
とりあえず自分が考えた方法だと、
std::ifstream ifs(...);
std::stringstream ss;
while (!ifs.eof())
{
  char buf[1024];
  ifs.read(buf, 1024);
  ss.write(buf, ifs.gcount());
}
こんな感じです。こんなことをする理由は、
ifstreamからstd::getlineをして1行ずつ処理するプログラムなのですが、
stringstreamに全部入れた後、std::getlineをした方が、倍以上高速になることを発見したからです。
それとも、もっと効率の良い方法はありますか?

173 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 09:25:09 ]
>>172 ss << ifs.rdbuf();



174 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 10:44:50 ]

ifstream ifs("dir_name");
if ( ifs.fail() ) { return 0; }
if ( ifs.isDirectory() ) { }

みたいに標準ライブラリだけで
ディレクトリか否かを判定することってでけますか?

あと、ディレクトリ内にある全ファイルの名前取得みたいなことは
標準ライブラリだけででけますか?

175 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 10:50:52 ]
>>172
pubsetbuf()でバッファでかく取っとくと、一般には速くなると期待されるんだが、
gccの少なくとも古いバージョンでは、open済みのstreambufに
pubsetbuf()を実行しても、何食わぬ顔をして元のバッファを使うようだ。

mmap()したポインタをstrstreamにそのまま突っ込むのが多分一番速いが、
移植性に欠ける上にstrstreamがdeprecatedなのがネックだな。
stringstreamのstrメンバを使うとせっかくmmap()したものを
わざわざコピーしてしまうし、
stringstreamのpubsetbuf()も有効とは限らないようだ。
(少なくともVC++では平然とシカトされる)

>>173
それ記述が簡単でいいんだが、少なくとも
VC++のostream実装とかだと、大して速く無さそうなんだよな。
sgetc()/snextc()と、sputc()使って1文字ずつコピーしてるし
微妙に無駄の多いコードになってるんで、
下手すりゃ手書き1文字コピー回したしたほうがまだ速いかもしれん。






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

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

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