- 1 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:02:46 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/
- 985 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:17:14 ]
- >>984
ただ単に 1 と書いたら、意味がわかりにくい。 もう一度聞くが、 sizeof(DWORD)も4と書くのか?
- 986 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:18:26 ]
- 誰が1や4と書くなんて書いとんねん
つまらない事で言い合いスンナ!
- 987 名前:971 [2007/08/19(日) 19:19:18 ]
- >>980
おお〜なんか納得できる^^ sizeof(char)に関しては、>>981さんの考え方に近いかな〜 昔32bit -> 64bitの移植に携わったことがあって、その時にちと苦しめられたので明示的に書くようにしてます^^ 具体的にはポインタの領域確保するのに、(たぶん組んだ人は動きゃいいやという考え方で適当に組んでいたダメ人間)sizeof(int)使って領域確保してて、 32bitだとポインタもintも両方同じ4バイトだからちゃんと動作するんだけど、 64bitではポインタだけ8バイトに変わるから、そこの部分でエラーが出て、 しかもコピーして使いまわしたらしく同じようなコードがあちこちに点在してて・・・ 今となってはいい思い出だけど、あれは大変だったなぁ〜(-_-;) 今回のケースとは大分違うんだけど、明示的に書いておいた方が将来的にどんなふうに仕様が変化するか分からないし安全だなぁ〜って教訓からこうしてます^^
- 988 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:25:16 ]
- TCHARも知らん分際で何ホザいとんねん
- 989 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:27:16 ]
- >>985
だから「いらない」って言ってるじゃん。 malloc(strlen(s) * 1) こんな書き方しろなんて言ってないよ。
- 990 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:30:02 ]
- >>987
intとcharは、事情が違うよ。
- 991 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:39:00 ]
- もうスレが終わりそうだからマトメ
(a) malloc(tcslen(s) * sizeof(TCHAR)) なら普通の書き方。 (b) malloc(strlen(s) * sizeof(char)) のsizeof(char)は意味がない。 あとでcharをTCHARに変えるかもって想定してるなら、この使い方はマジックナンバーを 埋め込んでるより多少はマシだけど、まあ大差ないレベル。 最初から (a)の書き方をするべき。
- 992 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:42:26 ]
- >>989
malloc(strlen(s)+1) こんな書き方をしたら、気持ち悪いだろ。 mallocが受け取るのは「文字数」ではなく「バイト数」だ。 strlenが返すのは「バイト数」ではなく「文字数」だ。それは+1しても、「文字数」のままだ。 「バイト数」を受け取るところに、「文字数」を渡すのは、気持ち悪すぎる。 sizeof(char)に「文字数」を掛けることで、適切に「文字数」を「バイト数」に変換できる。 だから、たとえsizeof(char)が1だとわかりきっていても、それを省略すべきではない。
- 993 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:43:53 ]
- >>991
99%の確率でバグっているコードを「普通の書き方」なんて言うな。
- 994 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:48:17 ]
- >sizeof(char)に「文字数」を掛けることで、適切に「文字数」を「バイト数」に変換できる。
いいえ。
- 995 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:48:32 ]
- ツマンネェ奴ら
- 996 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:49:00 ]
- >>977 は >>974 でしょ?
元もとstrlenだけで十分だと言ってるんだと思うが... もし、つけるんだったらsizeof(*line) じゃだめか?
- 997 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:52:37 ]
- >>993
元のコードにあわせただけ。 この話の本筋とは関係ないし。 マイナーな本でsizeof(char)を使えって薦めてるのを見たことあるけど、 まあ、こういうスタイルは、圧倒的に少数派。 こんなクセのある書き方を推奨するやつは、コードを読んで無さ杉。
- 998 名前:971 [2007/08/19(日) 19:54:19 ]
- なんかスレが荒れてしまって申し訳ないです。
皆さん善意で書き込んでくださっているわけなので、感謝してます。 ただ個々人で使用し続けてきたコーディングのスタイルがあって、それでいい争いになってしまっていて、すれが険悪になってしまって申し訳ありません。 今回の件ではバグが取れたという以外にも、文字列絡みの処理に対して再勉強する機会になったのでよかったです。
- 999 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:55:25 ]
- ↓1000
- 1000 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:02:37 ]
- 呼んだ?
- 1001 名前:1001 [Over 1000 Thread]
- このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
|

|