[過去ログ] C言語なら俺に聞け 163 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
232: 警備員[Lv.3][新芽] (ワッチョイ bfa6-/vo+) 2024/09/18(水)13:51 ID:eTGNACyx0(2/2) AAS
なるほど
勉強になります
233(1): (スプッッ Sd3f-2MD7) 2024/09/18(水)14:54 ID:LEoKOQZWd(1/5) AAS
>>222
>この場合に限らずcでは範囲チェックなどされないでしょ
>必要なら自分でチェックするのが原則
>
>void aaa(char hage[10],int idx)
>{
> if((UINT)idx < sizeof(hage)/sizeof(hage[0]))
> printf("%d=%d¥n",idx,hage[idx]);
> else
> printf("%dは範囲外だhage¥n",idx);
>}
>
>これなら[10]に意味が出る
printf("%uz\n", sizeof(hage)/sizeof(hage[0]));
の結果ってどんな値表示されるの?
234: (スプッッ Sd3f-2MD7) 2024/09/18(水)14:56 ID:LEoKOQZWd(2/5) AAS
書式のとのuzじゃなくてzuだっけ?zだけでよかったっけ?
ま、主旨はそこじゃないからいっか。
235(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ d7e2-6w0d) 2024/09/18(水)15:47 ID:3rwci13t0(1) AAS
>>233
sizeof(char*)/sizeof(char) ということになる。
sizeof(char) は確実に 1 だから結果としては単に char* のバイト数ってことだね。
この場合は「『もし 10 に意味があるとしても』境界チェックはされないことに変わりないのでなんの役にも立ってない。 役に立てるとしたらここまで書かなきゃならない」というのが主旨なのであくまでもしもの話。
実際の値はどうでもよい文脈だと思う。
236: (ワッチョイ d7cd-qbvN) 2024/09/18(水)16:33 ID:wcwImUMc0(2/3) AAS
>>224
ああそうなの
昔のことだから記憶違いをしてたようだ
237: (スプッッ Sd3f-2MD7) 2024/09/18(水)16:43 ID:LEoKOQZWd(3/5) AAS
>>235
>>222 の「これなら[10]に意味が出る」ってのは間違いってことね。
238(1): (ワッチョイ d7cd-qbvN) 2024/09/18(水)18:00 ID:wcwImUMc0(3/3) AAS
'ここの10は意味ありませんよ'
って警告を出してもいいじゃんってことでしょ
それなら例えば
typedef char HAGE_TBL[10];
void foo(HAGE_TBL hage) {}
(毎回10とか書くのは危険なのでこういう使い方が多いと思う)
などとした場合に毎回警告が出てうざいことになるんじゃないか
239: (ワッチョイ ff63-y7MN) 2024/09/18(水)18:07 ID:UYQxUcxO0(3/4) AAS
警告ならまだ笑っていられるが、
明らかに書いた奴の意図とは違って誤動作してるだろ
240: (スプッッ Sd3f-2MD7) 2024/09/18(水)18:30 ID:LEoKOQZWd(4/5) AAS
>>222 のバグを晒すスレはここですか?
241: (スプッッ Sd3f-2MD7) 2024/09/18(水)18:46 ID:LEoKOQZWd(5/5) AAS
C言語は難しいな
242: (ワッチョイ ff63-y7MN) 2024/09/18(水)20:53 ID:UYQxUcxO0(4/4) AAS
void aaa()の中で、
引数で渡された値が何かを確かめて見ると良い
それと、 sizeof(hage)やsizeof(hage[0])の値も
プログラム書いた人の意図としては、
sizeof(hage)/sizeof(hage[0])が10になるはずなんだが
さてさていくつだろうか?
243: (ワッチョイ 9f7c-2MD7) 2024/09/19(木)00:15 ID:5H+5PGV10(1) AAS
もうやめて!>>222 のライフはゼロよ!
244(1): (ワッチョイ 9f1e-S785) 2024/09/19(木)06:32 ID:zdFAvN1E0(1) AAS
本人が新たなネタを出してくるんだもん。
>>238 でもわざわざ
typedef char HAGE_TBL[10];
ってやっておきながら、なんで
void foo(HAGE_TBL hage)
なの? 構造体と同じように
void foo(HAGE_TBL *hage)
ってしてみたら新たな何かが見えてこないかい?
245(1): (ブーイモ MMbf-GITO) 2024/09/19(木)15:36 ID:bQAYIDF0M(1) AAS
cは洗練された型システム持ってないんだからそんなところ頑張っても無駄なんだよ
この悟りに至って始めて脱初級
原則語るならそれからにしてくれ
246: (ワッチョイ ff63-y7MN) 2024/09/19(木)15:40 ID:cPR7xA8Z0(1/3) AAS
Cは一部の洗練された型システム持つ言語よりも遙かに自由度が高い
そこが分かってようやく中級レベル
あとは本人の努力次第で空も飛べるし海も潜れる
247: (ワッチョイ bfda-GITO) 2024/09/19(木)15:50 ID:c2v//UgT0(1/2) AAS
おいおい
そのぶん危険なんだから持ち上げる部分でもないだろ
お前も初級
248(1): (ワッチョイ ff63-y7MN) 2024/09/19(木)17:19 ID:cPR7xA8Z0(2/3) AAS
ナイフは危険だが有用
不器用者は使わない方が良い
249(1): (ワッチョイ b766-qbvN) 2024/09/19(木)17:44 ID:8NYyNXbk0(1) AAS
>>244
typedefは新たな型を作るわけじゃない別名を定義するだけから
void foo(char hage[10])
と
void foo(HAGE_TBL hage)
は同じことだよ
250: (ワッチョイ bf29-GITO) 2024/09/19(木)20:28 ID:c2v//UgT0(2/2) AAS
>>248
c言語ってとっくの昔から自由にキャストしまくれる言語じゃないの知ってるか?
さぁお前はなんと答える?
251: (ワッチョイ ff63-y7MN) 2024/09/19(木)20:47 ID:cPR7xA8Z0(3/3) AAS
そんなに怖がるなよ
食われるわけじゃないんだから
252: (アウアウエー Sadf-3vlU) 2024/09/19(木)21:11 ID:/CBFTgYsa(1/2) AAS
>>245
悟った人は全部void*
253: (ワッチョイ ff4c-KlCL) 2024/09/19(木)21:52 ID:j90utfqH0(1) AAS
文字も数字も全部intでいいやん
254: (アウアウエー Sadf-3vlU) 2024/09/19(木)21:56 ID:/CBFTgYsa(2/2) AAS
getch() は int
255: (ワッチョイ 9f1e-S785) 2024/09/20(金)07:15 ID:dn4N5ANS0(1) AAS
>>249
それが不満なようだから「HAGE_TBL * にしたら何ができるか考えてみては?」ということでは?
256: (ササクッテロ Sp47-i443) 2024/09/24(火)10:26 ID:/2yiAcKTp(1) AAS
昔のコンピュータはメモリー少ないから、intで文字持つなんて贅沢だったんだよ
257: (ワッチョイ 1e2b-VArp) 2024/09/24(火)11:12 ID:CARZyoOh0(1) AAS
次のジジイの的外れな言いたいだけコメントを先取り
intは16bit以上だぞ
258: (ササクッテロ Sp47-i443) 2024/09/24(火)11:31 ID:QMMOdtbOp(1) AAS
違うよ、intは処理系依存だから8ビットの場合もある
259: (スプッッ Sd52-L8o3) 2024/09/24(火)11:49 ID:vvKB2ofDd(1) AAS
規格書読め
260: (ブーイモ MM32-VArp) 2024/09/24(火)11:54 ID:kMxfGMRcM(1) AAS
次のジジイ
getcharがなぜintを返すか
261(1): (ワッチョイ d6f5-K4S3) 2024/09/24(火)19:39 ID:tv/lKhnI0(1/2) AAS
>>174
> char* foo = "hoge";
>
> のようなケースではポインタ foo は文字列リテラルを指してる
(単に端折っただけかもしれないけれど、)文字列リテラルに関してCには非常に込み入った事情(Rationale Rev. 5.10 6.4.5 冒頭-l.26, N1256 Annex J.5.5)があり、厳密に言えば foo は "hoge" によって初期化された無名の配列を指している(N1256 6.7.8-32)。
C99RationaleV5.10
外部リンク[pdf]:www.open-std.org
テンプレ入りキボンヌ
>>皆の衆
ともあれ、込み入った事情に該当しなければ
const char afoo[] = "hoge";
あるいは
const char * const ccfoo = "hoge";
場合によって
const char *cfoo = "hoge";
と書いて、うっかり書き換え防止に勇往邁進するのじゃ。
上下前次1-新書関写板覧索設栞歴
あと 741 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.024s