Q&A
解決済
4回答
17274閲覧
総合スコア72
C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。
0グッド
0クリップ
投稿2020/07/01 08:44
0
###わからないこと C言語で,size_t型の変数があることを知りました. 独学で勉強していて,
C1char str[] = "Hello"; 2int num = strlen(buf);
C
1char str[] = "Hello"; 2int num = strlen(buf);
のようなコードを書くとエディターが警告をだすのでintにキャスト変換してプログラミングしていたのですが,そもそもintじゃなくてsize_tを使わないといけないような場面ってどういう場合でしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
質問へのコメント
回答4件
int で表せる範囲を超えた値が生じる可能性があるからです。 int や size_t の具体的な大きさは言語仕様では決まっていませんが、現代においてよく使われている 64bit パソコンでは int が 4 バイト、 size_t が 8 バイトとしていることが多く、 size_t で表現できる値が int で表現できるとは限りません。
int
size_t
質問の事例では、キャストを付けなくても暗黙の型変換はされるので言語仕様上の挙動は何も違いがありません。
投稿2020/07/01 08:56
総合スコア5790
回答へのコメント
2020/07/01 08:59
ベストアンサー
おそらく、あなたの環境ではsize_t はunsigned long と定義されてると思います。 intの表現範囲を超えるサイズの文字列を扱うときは、size_t じゃないときちんと動きませんね。
#そういう場合がありうるか、というのはべつのおはなし
投稿2020/07/01 08:55
総合スコア88192
2020/07/01 08:58
継続的にメンテしていく場合10年後などを考えると型に意図をもたせた方が楽です。
たとえば、32bitアーキテクチャから64bitアーキテクチャの変遷時には 使えるメモリが4GBから16EBまで増えました。(正確には現在は256TBだったはず)
こうなるとstrlenの結果がintに収まるかは不明です。
投稿2020/07/01 09:00
総合スコア15149
2020/07/01 09:01
size_tは符号なし整数(たぶんunsigned long)です。 で、strlen()は符号なし整数を返してきます。(配列の長さ等) 配列のインデックスは、0位上なので、通常、arry[i]等のインデックスはsize_tを使います。
投稿2020/07/01 08:57
総合スコア6851
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
15分調べてもわからないことはteratailで質問しよう!
ただいまの回答率85.29%
質問をまとめることで思考を整理して素早く解決
テンプレート機能で簡単に質問をまとめる
size_tを使う理由は何がありますか?
2020/07/01 08:59