天国にいけるC言語入門 ヘキサ構造体 ver5.2130
1次元配列でなく2次元配列のなかに格納されている数値データの数を配列のなかに格納されている文字列データの文字数を数え上げるstrlen関数を使って数え上げてみます
1次元配列でなく2次元配列のなかに格納されている数値データの数を配列のなかに格納されている文字列データの文字数を数え上げるstrlen関数を使って数え上げてみます
マックス 「Ⅰ次元配列の中に格納されている数値データの数は
strlen関数を使って
なんとか無事に数え上げることができた。
ただし
統合開発環境EAZY IDECの場合だけだったがな
Visual Studioでは数え上げることができなかったい
次は
strlen関数を使って
2次元配列の中に格納されている数値データの数を数え上げてみるか~
おもしろそうじゃないか😊」
(今更ですが😊
このお話では 配列内に格納されている数値データの数を数え上げています。
文字列データの数を数え上げているのではありませんので
配列内にはヌル文字\0は格納されていません。)
てんC「はいっ
次は
2次元配列に格納された☆数値データの数☆を
"配列に格納された☆文字列データの文字数☆を数え上げる"
strlen関数を使って数えあげてみます。
例として
2次元配列宣言
int hairetu[2][3]={{1,2,3},{4,5,6}};
によって作成された配列のなかに格納されている☆数値データの数☆を
”配列に格納された☆文字列データの文字数☆を数え上げる”
strlen関数を使って数え上げてみます。
この2次元配列の中に格納されている数値データの数は
1,2,3,4,5,6の6つですね。
先程のエピソードでもみてきましたが
通常の場合 一般に
配列に文字列データではなく数値データを格納するときは
配列宣言、初期化は
変数の型
char型をつかって
char型の配列宣言
char hairetu[2][3]={{1,2,3},{4,5,6}};
が行われるのではなく
int型を使って
int型の配列宣言
int hairetu[2][3]={{1,2,3},{4,5,6}};
が行われます
なぜなら
char hairetu[2][3]={{1,2,3},{4,5,6}};
により生成される
char型の配列変数
hairetu[0][0]
hairetu[0][1]
hairetu[0][2]
hairetu[1][0]
hairetu[1][1]
hairetu[1][2]
は-128から127の範囲外の
数値をデータを格納できないからですね。
それでは
2次元配列宣言
int hairetu[2][3]={{1,2,3},{4,5,6}};
によって作成された配列のなかに
格納されている数値データの数をstrlen関数を使って数え上げてみます。
カタカタカタ
#include <stdio.h>
#include <string.h>//🌞ヘッダファイル <string.h>をインクルードしてください
int main(void)
{
int hairetu[2][3]={{1,2,3},{4,5,6}};
int a;
a=strlen(hairetu);
printf("hairetuに格納されている数値データの数は%dです \n",a);
return 0;
}
Visual Studioの場合
ビルド実行結果
エラー (アクティブ) E0167 型 "int (*)[3]" の引数は型 "const char *" のパラメーターと互換性がありません
エラー C2664 'size_t strlen(const char *)': 引数 1 を 'int [2][3]' から 'const char *' へ変換できません。
EAZY IDECの場合
コンパイル結果
hairetuに格納されている数値データの数は1です
マックス「
Visual Studioの場合はやはりプログラムを実行できないか・・
EAZY IDECの場合は・・・
1か....ああっOH!!ノウ💦」
てんC 「EAZY IDECの場合でも
strlen関数は
2次元配列内の数値データの数を正確にかぞえあげることができていませんね(^^)。
次は3次元配列宣言
int hairetu[2][3][4]=
{{{2,3,4,5},{8,8,8,7},{3,8,2,8}},{{7,1,0,8},{3,2,4,5},{6,3,0,8}}};
によって作成される配列に格納されている数値データの数を数え上げてみます。」
#include <stdio.h>
#include <string.h>//🌞ヘッダファイル <string.h>をインクルードしてください
int main(void)
{
int hairetu[2][3][4]=
{{{2,3,4,5},{8,8,8,7},{3,8,2,8}},{{7,1,0,8},{3,2,4,5},{6,3,0,8}}};
int a;
a=strlen(hairetu);
printf("hairetuに格納されている数値の数は%dです \n",a);
return 0;
}
Visual Studioの場合
エラー (アクティブ) E0167 型 "int (*)[3][4]" の引数は型 "const char *" のパラメーターと互換性がありません
エラー C2664 'size_t strlen(const char *)': 引数 1 を 'int [2][3][4]' から 'const char *' へ変換できません。
EAZY IDECの場合
コンパイル結果
hairetuに格納されている数値の数は1です
マックス 「おおぅぅおにゃにゃにゃんと・・・
にゃんこショックです」
てんC 「ふ・・ふふ・・・マックスさん、
Visual Studioの場合はビルドエラーが表示されています
今度も
EAZY IDECは
strlen関数は数値の数を正確にかぞえあげることができていませんね。」
マックス 「いや~ん・・・まあ、
さすがに2次元、3次元配列の中に格納されている数値データの数を
もともと
”char型の配列に格納された文字列データの文字数を数え上げる”
strlen関数を使って数えあげることはちょっと無理だったかにゃ・・」
まあ さすがに こんな感じに格納されている
{{{2,3,4,5},{8,8,8,7},{3,8,2,8}},{{7,1,0,8},{3,2,4,5},{6,3,0,8}}}
配列の中の数値データの数をかぞえあげられないのは
無理もない・・・か」
#include <stdio.h>
int main(void)
{
int hairetu[2][2][1]={{{1},{1}},{{1},{1}}};
int a;
a=strlen(hairetu);
printf("hairetuに格納されている数値の数は%dです \n",a);
return 0;
}
マックス「↑もstrlen関数が配列の中に格納されている数値データの数を数え上げるのは無理そう・・・
見た感じからむっり」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます