質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

14526閲覧

size_tを使う理由は何がありますか?

RaitoN

総合スコア72

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/07/01 08:44

###わからないこと
C言語で,size_t型の変数があることを知りました.
独学で勉強していて,

C

1char str[] = "Hello"; 2int num = strlen(buf);

のようなコードを書くとエディターが警告をだすのでintにキャスト変換してプログラミングしていたのですが,そもそもintじゃなくてsize_tを使わないといけないような場面ってどういう場合でしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

int で表せる範囲を超えた値が生じる可能性があるからです。 intsize_t の具体的な大きさは言語仕様では決まっていませんが、現代においてよく使われている 64bit パソコンでは int が 4 バイト、 size_t が 8 バイトとしていることが多く、 size_t で表現できる値が int で表現できるとは限りません。

質問の事例では、キャストを付けなくても暗黙の型変換はされるので言語仕様上の挙動は何も違いがありません。

投稿2020/07/01 08:56

SaitoAtsushi

総合スコア5684

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RaitoN

2020/07/01 08:59

せんきゅー!
guest

0

ベストアンサー

おそらく、あなたの環境ではsize_t はunsigned long と定義されてると思います。
intの表現範囲を超えるサイズの文字列を扱うときは、size_t じゃないときちんと動きませんね。

#そういう場合がありうるか、というのはべつのおはなし

投稿2020/07/01 08:55

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RaitoN

2020/07/01 08:58

なるほど.範囲が異なりましたか.わかりました.
guest

0

継続的にメンテしていく場合10年後などを考えると型に意図をもたせた方が楽です。

たとえば、32bitアーキテクチャから64bitアーキテクチャの変遷時には
使えるメモリが4GBから16EBまで増えました。(正確には現在は256TBだったはず)

こうなるとstrlenの結果がintに収まるかは不明です。

投稿2020/07/01 09:00

asm

総合スコア15149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RaitoN

2020/07/01 09:01

ありがとう.深いね.
guest

0

size_tは符号なし整数(たぶんunsigned long)です。
で、strlen()は符号なし整数を返してきます。(配列の長さ等)
配列のインデックスは、0位上なので、通常、arry[i]等のインデックスはsize_tを使います。

投稿2020/07/01 08:57

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RaitoN

2020/07/01 08:59

ありがと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問