よく入門者などにchar str[256]という記述があります。
この256という数字には何か特別な意味があるのですか?
勿論2の8乗から来ているのでしょうが。
charって1バイト=8ビット=256ですよね。
str[256]というのを良く見かけるので、最初strは最大256個しか確保できないと思っていました。
でも、実際は1000でも良いのですよね。
ということで、どうして256という数字を使うのですか?
意味ありげな数字を使われると、初心者は混乱するので100とか200とかの方が良いと思うのですが。
特別な理由があるのでしょうか?
No.7ベストアンサー
- 回答日時:
ちょっと一言。
1バイト(8ビット)で表現できるのは、
符号なしの場合
0(00000000)~255(11111111)
符号ありの場合
-128(10000000)~127(01111111)
です。
256は表せません。
ついでにもう一言。
char str[256];
って「ファイルの名前」とか「ファイル中の1行」を
格納するために定義されることが多いでしょう。
私の場合は、
「名前(or 1行の文字数)が256文字もあるファイルは滅多に無いだろう」
「でも128文字ぐらいならあるかも。ちょっと不安」
「かといって512文字は多すぎるかな」
ってことで256にしてます。
はじめから文字数がわかってるときは32とか64にしたりもしますが。
(なんで2のべき乗なのかはNo.1の通りです。)
No.8
- 回答日時:
メモリ空間にstrの場所が確保される際、計算機によって異なると思いますが、例えば32bitおきに32bitからなる"箱"が用意されます。
ここでchar型を8bitと仮定するとstr[256]には、32bitの箱が64個、用意されます。ところがstr[250]などと書いた場合、箱は63個用意されますが、最後の1箱に関し、16bitだけ余ってしまい、メモリ資源の無駄使いのような感じになってしまいます。まぁ、今の時代、メモリは安いのであまり問題にならないと思いますが、この無駄を防ぐために2のべき乗を僕は使うことがしばしばです。
でも確かに256なんて半端な数です。しかし16進数で書けばchar str[0x100]です。なんとも美しいと思いませんか?
No.6
- 回答日時:
#2です。
>そのデータが表現出来る最大値をしきい値とすることがあります。
>1バイトの場合:256の種類のデータを表現(最大値:256)
>4ビットの場合:16種類のデータを表現(最大値:16)
>これが良く分かりません。
>1バイトとか4ビットはメモリの容量のことですか?
>それとも型のサイズのことですか?
そのデータを使用して、ある内容(例えば社員コード等)を表現する場合のそのデータの型のサイズのことです。
例えば、ある会社で社員コードを管理する時に、最大何名までを管理するかという場合、社員が100名以下の場合は、1バイトで社員コードを管理することが出来ます。(0~255の社員コードになるので、最大値を255にします。もし、最大値を999にする場合は2バイトで社員コードを管理する必要があります)
社員コードを1バイトにするか2バイトにするか、又は4バイトにするかは、メモリが非常に少ないシステムでは、大変重要な意味を持ちます。ここで、1バイトで社員コードを管理するとすると、最大256までが表現可能となります。(但し、普通は4バイトで管理するケースが一般的ですが・・)
ビットで管理する場合は、以下の様なケースです。例えば、ある複数の情報をint型(32ビット)で、表す場合、
先頭の4ビットを情報Aに割り当て、次の3ビットを情報Bに割り当てるような場合です。
この場合、情報Aは最大16通りのケースが表現でき、情報Bは最大7通りの表現ができます。1つの整数を幾つかのビット情報の集まりとして管理する手法は、OSのカーネール情報の管理などの場合によく採用されています。
回答ありがとうございます。
どうも話がうまく通じていないと思ったら、最初の私の質問が十分ではなかったようです。すみません。
char str[256]を文字列を格納するために宣言した場合に、どうして文字を最大255文字とするのか?
ということがお聞きしたかったのです。
たぶん#7さんの回答がその理由なのでしょうね。
No.5
- 回答日時:
>ちなみに、ヌル文字含まずなので注意が必要。
失礼しました。
ヌル文字は含みます。
No.3
- 回答日時:
ファイル入出力のバッファとして使用する場合、256 や 512、1024 と言った大きさにしておくと、処理効率がよくなるといったことを聞いたことがあるような気がします。
といっても、それは MS-DOS の時代の話なので、今の時代の PC 環境では、char str[256]; にしようが char str[1000]; にしようが、体感的には何も変わらないと思います。あと、これも今の時代では、ほとんどどうでもいいレベルの話ですが、char str[300] とするより、char str[256]; としておくと、str[ i ] のように使用する i を int でなく char で宣言できる ( メモリ使用量を 1 byte 少なくすることができる。 )とか。
あるいは、Windows 95 以降の場合、char str[_MAX_FNAME]; と書く代わりに、初心者にわかりやすかろうと思って char str[256]; と書いているとか。
とりあえず思い当たるのはそんなところですが、結論としては、あまり深い意味はないと考えてよろしいかと。
回答ありがとうございます。
こだわりたくは無いのですが、どうしてMAX_FNAMEって256なのでしょうか?
長すぎず短すぎずといったとこなのでしょうか?
No.2
- 回答日時:
ご想像のとおり、2の8乗からきています。
コンピュータは内部は2進数のため、
2,4,8,16,32,64,128,256,512,・・
といった数値がきりの良い数値となります。
人間の場合は10のn乗がきりの良い数値の為
1,100,1000,1000,・・となります。
従って、256ようなの数値を採用するケースが多くなります。
従って、何かのしきい値を設けるとき、100にするか256にするかは、個人の好みの問題になります。どちらを採用するかを顧客に提案する場合は、一般的には、コンピュータ業界の人間は、2のn乗の値をきりの良い値と考えますので、256の値を採用した方が、すんなり受け入れられるケースが多いでしょう。(100のほう受け入れられるケースもあります。)
但し、マイコンのように、少ないメモリでシステムを作る場合(又は昔の時代のようにメモリが高価な時)は、そのデータが表現出来る最大値をしきい値とすることがあります。
1バイトの場合:256の種類のデータを表現(最大値:256)
4ビットの場合:16種類のデータを表現(最大値:16)
のようにします。
回答ありがとうございます。
>そのデータが表現出来る最大値をしきい値とすることがあります。
>1バイトの場合:256の種類のデータを表現(最大値:256)
>4ビットの場合:16種類のデータを表現(最大値:16)
これが良く分かりません。
1バイトとか4ビットはメモリの容量のことですか?
それとも型のサイズのことですか?
もし後者だとすると、
1バイトの配列を16こ
4ビットの配列を256こ
しても良いわけで、そのデータが表現できる最大値をしきい値とする意味合いが理解できないのですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語 少しの疑問 4 2022/11/08 02:48
- C言語・C++・C# C# 浮動小数の数値文字列化 1 2022/04/18 15:15
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- Visual Basic(VBA) VBA ユーザーフォームからSubプロージャ―に値を引き渡す方法 3 2023/04/09 01:54
このQ&Aを見た人はこんなQ&Aも見ています
-
【お題】NEW演歌
【大喜利】 若い人に向けたことは分かるけど、それはちょっと寄せ過ぎて変になってないか?と思った演歌の歌詞
-
あなたにとってのゴールデンタイムはいつですか?
一週間の中でもっともテンションが上がる「ゴールデンタイム」はいつですか? その逆で、一週間でもっとも落ち込むタイミングでも構いません。 よかったら教えて下さい!
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
好きな和訳タイトルを教えてください
洋書・洋画の素敵な和訳タイトルをたくさん知りたいです!【例】 『Wuthering Heights』→『嵐が丘』
-
バッファとは何ですか
C言語・C++・C#
-
数字以外が入力されたらエラー文を出したい。
C言語・C++・C#
-
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
-
4
char型配列の最大要素数
C言語・C++・C#
-
5
C言語 配列の長さの上限
C言語・C++・C#
-
6
#include <Windows.h>というヘッダファイルについて
C言語・C++・C#
-
7
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
8
ファイルクローズ(fclose)でエラーを発生させる方法
C言語・C++・C#
-
9
C言語での引数の省略方法
C言語・C++・C#
-
10
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
11
C言語 exitの使い方
C言語・C++・C#
-
12
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
13
Debug Assertion Failed?
C言語・C++・C#
-
14
配列を使わずに、変数名を動的にループで回したい
C言語・C++・C#
-
15
#define _CRT_SECURE_NO_WARNINGS について
C言語・C++・C#
-
16
sscanfとscanfの違いがよくわからないのですが、簡単に優しく教えて下さい。 お願い致します。
C言語・C++・C#
-
17
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
18
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
19
文字列から空白を取り除きたいのですが
C言語・C++・C#
-
20
間接操作のレベルとは
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
バイト列とバイナリ列の違いが...
-
UCS-2の一覧表が欲しい
-
COBOLのCOMP形式について
-
VBAでShift-JISのURLエンコード
-
VB.NET LeftBの代用
-
「1TB」のHDDに日本語は何字入...
-
Console.writeLineで文字化け
-
char str[256]の256の意味は?
-
EUCのダブルバイト文字の判定
-
pythonでバイナリデータを配列...
-
1バイト文字から2バイト文字に変換
-
【VB2005】テキストボックス内...
-
2バイト文字(いわゆる日本語)の...
-
バイト配列 抜き出す
-
文字数の限界
-
全角半角を調べるライブラリ関...
-
ビットスワップとバイトスワッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
バイト列とバイナリ列の違いが...
-
ピクセル,dpiから容量(バイト...
-
「1TB」のHDDに日本語は何字入...
-
Javaで日本語1文字のバイト数
-
機種依存文字をチェックしたい。
-
PICマイコンで変数値の保持
-
【VB2005】テキストボックス内...
-
SQLで1バイト、2バイト混在...
-
ビットスワップとバイトスワッ...
-
VBAでShift-JISのURLエンコード
-
GetWindowTextでアドレスバーか...
-
C++ Builderで文字列をバイトに...
-
UCS-2の一覧表が欲しい
-
64bit対応
-
日付時刻を4バイトに
おすすめ情報