ページ 11

配列

Posted: 2010年6月19日(土) 16:56
by ふがふが
char array[5][4];
多次元配列array[1]には1~1000までの整数が入ります。
array[1][0]=>1
array[1][1]=>null
かもしれないし、
array[1][0]=>1
array[1][1]=>0
array[1][2]=>0
array[1][3]=>0
array[1][4]=>null
かもしれません。
ランダムにしてるので私も何が入るのかわかりません。

とりあえず整数(int)配列ではなく
文字列(char)配列ということで。

そこで
arrayに1のとき(array[1][0]=>1,array[1][1]=>null)
if文で処理をしたいのですが、
どのようにしたらよろしいですか?

if(array[1] == "1")
このようにしても上手く動作しません。

初歩的なことで申し訳ないのですが
おしえてください。

Re:配列

Posted: 2010年6月19日(土) 17:05
by Poco
> arrayに1のとき(array[1][0]=>1,array[1][1]=>null)
> if文で処理をしたいのですが、
> どのようにしたらよろしいですか?
>
> if(array[1] == "1")
> このようにしても上手く動作しません。

文字列の比較は関数strcmp()を使ってください。

if ( ! strcmp( array[1], "1" ) ){
// 文字列が等しい場合の処理
・・・
}

Re:配列

Posted: 2010年6月19日(土) 17:08
by ふがふが
>ぽこさん
ありがとうございます。

Re:配列

Posted: 2010年6月19日(土) 17:13
by 組木紙織
とりあえず
こんな感じで
if(array[1][0] == '1' && array[1][1] == NULL)

やっていくと別の方法が欲しくなって区ので文字列操作関係の標準関数を調べてみてください。
strcmp()などの。

また。
文字と文字列の違いをしっかり把握してください。


/************************/
追記

先を越されてしまいましたね。
無意味なレスつけてすみません。 画像

Re:配列

Posted: 2010年6月19日(土) 17:20
by dic
別の方法ですが
if( array[1] == "1" )
ではなく
if( array[1] == '1' )
でも できます
char の一文字の時だけですけどね

Re:配列

Posted: 2010年6月19日(土) 17:58
by フリオ
 
 ちょっと気になったので、
char array[5][4];
で、
array[1][4]=>null
はだめです。
 

Re:配列

Posted: 2010年6月19日(土) 18:27
by dic
あ、多次元配列ですね
if( array[0][1] == '1' )
です

Re:配列

Posted: 2010年6月20日(日) 07:22
by へろりくしょん
すでに解決しているところを、重隅をつつくようで申し訳ないのですが。

文字が必要なところで null とか NULL がちらほらと出てきていますが。


nullについては、ANSI-C の規格には無いようなのでちょっとスルーしますが、新ANSI C言語辞典によれば、NULLとは次のようにあります。

NULL[ヌル](=空) (1)空ポインタ (2)[マクロ/空ポインタ定数- | <stddef.h>,<stdio.h>,<stdlib.h>,string.h>,<time.h> | 値0の汎整数定数式か、void*型にキャストした式] 空(null) ポインタを示す空ポインタ定数である。

とあります。


また空ポインタについては次の通りです。

空ポインタ(null pointer) いかなるオブジェクト(記憶域)へのポインタとも、いかなる関数へのポインタとも区別され、比較しても等しいことはないポインタ。


C言語では、ポインタが現れるべき場所に定数0が現れると、それは空ポインタであると読み替えられます。
ですから、#define NULL 0x12345 といったあまり一般的でない定義の処理系であっても、char *hoge = 0; というコードと、char *hoge = NULL; というコードは等価となります。


だもので、本来char型と比較したり代入したりする物ではないと思うのですが。
一連の流れの中で、さもあって当然のように扱われていたので、ちょっと気になった次第です。


最近の規格は解らないのですが、実際のところどうなんでしょう。