[過去ログ] 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