[過去ログ] sizeof(char)が必ず1でも、省略すべきではない (683レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1(15): 2007/08/19(日)20:06 AAS
malloc(sizeof(char)*(strlen(s)+1))
ではなく
malloc(strlen(s)+1)
と書くような糞コードばかり見て育った、
悪しき慣習を引きずった人は引退すべし
31(3): 2007/08/19(日)23:18 AAS
いちいち
hoge = (type*)malloc(sizeof(type)*size) ;
なんて書いてる人いるの?
初心者だって、
#define MALLOC(type, size) ((type)*)malloc(sizeof(type)*(size))
くらいして、
hoge = MALLOC(char, strlen(s)+1) ;
って書くだろ?
だいたい、いまどきCオンリーなんて、なにか理由があるときくらいなもので、
普通はC++だから、文字列クラスを使うだろう。
省2
40(3): 2007/08/20(月)00:00 AAS
>>32
たまたま 文字数==バイト数 なだけじゃん。
49(4): 2007/08/20(月)00:29 AAS
>>47
malloc(strlen(s) + sizeof(char)) って書くってこと?
53(5): 2007/08/20(月)00:46 AAS
>>49
どこから、そういう発想がでてくるのだろ。
size_t CalcRequiredMemoryForString(const char* s) {
return sizeof(char)*(strlen(s)+1) ;
}
もっと細かく分けて
size_t ScanAscizStringLength(const char* s) {
return strlen(s)+1 ;
}
size_t CalcRequiredMemoryForString(const char* s) {
省6
62(3): 2007/08/20(月)01:13 AAS
>>59
C++でもmalloc使う人いるんだよねぇ。
> >>49 程度で済ました方が良いと思う。
strlen(s) + sizeof(char)
これこそ意味不明だねぇ。
1文字分ってことなら、
sizeof(char)
ではなく
sizeof(char)*1
としないとねぇ。
省6
75(3): 2007/08/20(月)11:52 AAS
>>71
#include <stdio.h>
int main()
{
printf("%d\n",sizeof(char));
return 0;
}
をCでコンパイルしてみたか?
C++でもコンパイルしてみたか?
100(4): 2007/08/20(月)17:39 AAS
外人は文字が2バイトかもしれないなんて考えてないから、
strlenという関数名なんだろ。
124(3): 2007/08/20(月)20:43 AAS
>>100
>>107
UTF-16とか思い出してあげてください。
180(4): 2007/08/24(金)20:52 AAS
文法的にも、プログラム的にも、省略するのは間違いではない。
だが、
プログラムを人間が読んで理解する上では、省略しないほうがよい。
187(3): 2007/08/25(土)14:24 AAS
#define SZCHAR 1
p = (char*)malloc(SZCHAR*strlen(ps));
if(p == NULL)
{
return ERR;
}
こうすればいいじゃね
201(7): 2007/08/26(日)15:47 AAS
>>198
プログラミング言語C第2版p44(ISBN4-320-02692-6)にはたしかに書いてあるね。
けどプログラミング言語C++第3版(ISBN-4-7561-1895-X)にはそんなこと書いてないよね。
charのサイズに関してはp110で言及してるけど、サイズが1であること、8ビット以上であること、
ほとんどの場合に8ビットバイトであることはかかれてるけど、1バイトとは書いてないよね。
#これよんで9ビットバイトって書いてもいいのかとは確かに思った。
まぁ、何が言いたいかというとcharのサイズが2バイトのC++環境とかだと
sizeof(char)をかけてもC++の仕様レベルで必要バイトサイズとれないよなって話。
#mallocの引数はバイト数なんだよね。
Cは厳密な話知らなかったから知らない。
省4
231(3): 2007/08/27(月)01:09 AAS
お前ら、こんな下らない話で、よくここまでスレを伸ばしたなぁ。
いまどきmallocとstrlenを散在させるようなコードを書くほうがオカシイ。
strlenなんて使うか? ふつー。
245(4): 2007/08/27(月)16:17 AAS
>>243
何かにつけてstrlenする、糞遅くて信頼性の低いプログラム書いてるのか。ご苦労さまです。
303(3): 2007/08/31(金)01:34 AAS
外部リンク[html]:dist.dc.kumamoto-u.ac.jp
の問題2
「自分なりの理由」があればどちらでも良い。
という答えな気がする。
321(5): 2007/08/31(金)15:12 AAS
また1つごみを見付けたんで記念カキコ
外部リンク[aspx]:msdn2.microsoft.com
pszSrc= new char(12);
if(pszSrc)
pszSrc= "Hello world!";
328(3): 2007/08/31(金)19:35 AAS
>>321は良い踏み絵だな
判ってない奴が浮き出てきた
354(3): 2007/09/03(月)22:57 AAS
突然だがスレを激しくrollbackしていいかな。
sizeof(char)は確かに仕様で1と決まっているけど、省略しない方が良い。
コメントやsizeof(char)==1の理解が無くても、
ソースを見るだけで文字数→バイト数として扱いたい意図が明確になる。
それにコンパイラの最適化でどうせコストは0だ。
ただ、そんな冗長なソースが散在しているのが嫌だというのも同意出来る。
しかしそれ以前に、文字列の操作なんて普通はラップしないか?
>malloc(sizeof(char)*(strlen(s)+1))
>malloc(strlen(s)+1)
両方とも、非常に短い関数以外でこんなん出てきたらどうかと思うんだが。
省7
415(3): 2007/09/29(土)23:17 AAS
ところで、sizeof(char)=sizeof(short)=sizeof(int)=2っていう設定のトンデモコンパイラがあるらしい。
一応、C言語の規格上これは間違っていない。(型のサイズは決められてないからね。)
469(3): 2008/03/24(月)23:46 AAS
>>468
セキュリティに限らず、いかにバグの入り込む余地を減らすか、ってこと。
余地が少なければ、バグの有無を確認するための工数が減るわけよ。
474(20): 2008/03/25(火)15:27 AAS
>>473
printfに限った話ではないし。
int height ;
int weight ;
中略
height = weight ;
こういうのを機械的に検出できるかどうかは、
微々たる事ではあるが、
ソフトウェアの規模が大きくなってくると重要よ。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.052s