10秒目をつむったら…

C言語の文字列で数字を比較する場合以下の3パターンがあります
 1.X > 5    
 2.X > ”5” 
 3.X > ’5’

あるchar属性の Yがあるとします
 char Y;
 Strncpy(Y,”5”); 
 YY=atoi(Y);
 
 上記1は  X > Y
 上記2は  X > YY となりますが

 上記3のシングルコーテーションとして
 比較する関数を教えてください


 

 

A 回答 (5件)

>上記3のシングルコーテーションとして比較する関数を教えてください



聞きたいことはなんとなくわかりますが・・・間違いが多い(^^;

5  は 整数(int) の 5
"5" は 文字列(char *) の 5
'5' は 文字(char)の 5

''は1つの文字です。
""は文字列(ヌル文字で終わる文字の配列の先頭のポインタ)です。

char *Y = "5";
int YY;
YY = atoi(Y);

1 X > YY
2 strcmp(X, Y)
3 X > Y[0]

1 は 整数の比較
2 は 文字列の比較
3 は 文字の比較

文字列 Y の1文字目 Y[0] が '5' と同じことになります。

char *Y = "5";
char Y[2] = { '5', '\0' };

上記の二つは同じ内容になります。分かるかな?
    • good
    • 0
この回答へのお礼

お忙しい所、初心者の人間に丁寧な回答ありがとうございました。

お礼日時:2007/02/06 00:37

文字と文字列の違いをまず理解しましょう。

教科書をよく読んでください。

””でくくられた文字列定数(リテラル)は、基本的には <や>などによる比較は意味を持ちません。

現在の多くのコンピュータではASCIIを使っていますので
5<'5'ですが、メインフレームなどだと 5>'5' となるマシンもありえます(たとえばEBCDICを使っていて文字リテラルがsignedの場合)。
    • good
    • 0

★C言語の初心者さんですね。


・C言語での文字列の比較は『strcmp』という関数になります。
 『<』、『<=』、『>』、『>=』、『==』、『!=』などの比較演算子では比較できません。
・ですから質問者さんの
 『上記1』は整数などの数値の比較、
 『上記2』は文字列ポインタの比較?、
 『上記3』は文字定数の比較になりますよ。
・また C言語での文字列は、文字型の配列を利用して表現します。
 VisualBasic、JavaScript、Perlなどの文字列型とは構造が違います。
 よって『Strncpy』関数のところは次のようになります。
 
 char Y[ 10 ];←余裕を見て 10 バイトを指定です。
 int YY;
 
 strcpy( Y, "5" ); ←『Y』に『"5"』という文字列をコピー
 YY = atoi( Y ); ←『Y』という文字列を整数値に変換して『YY』へ代入

●本題
・文字列の比較は『strcmp』で行います。
char aaa[] = "abc";
char bbb[] = "abcdef";
int cmp;

if ( (cmp = strcmp(aaa,bbb)) == 0 ){
 printf( "『aaa=bbb』両方の文字列は同じです。\n" );
}
else if ( cmp < 0 ){
 printf( "『aaa<bbb』aaa の文字列が小さいです。\n" );
}
else if ( cmp > 0 ){
 printf( "『aaa>bbb』aaa の文字列が大きいです。\n" );
}

最後に:
・『strcmp』関数の戻り値は『0以下』、『0』、『0以上』の3つの状態を返しますが、
 これが文字列の比較結果になります。
 『0以下』は第1引数が第2引数よりも小さい(短いなど)です。
 『0』   は第1引数と第2引数の文字列が全く同じです。
 『0以上』は第1引数が第2引数よりも大きい(長いなど)です。
・文字列の最後は『\0』というNULL文字が終端になっています。
 VisualBasic などでは自動的にメモリ容量が拡張したりしますが、C言語では拡張はしません。
 もう少し C言語の特徴(文字列とは?)をお勉強して下さいね。
・以上。おわり。
    • good
    • 0

何がしたいのかサッパリですが。


atoi のシグニチャは atoi( const char* ) なので間違ってるし、そもそも atoi は最早使われない関数。
ついでに strncpy のシグニチャは strncpy( char*, const char*, size_t )

マニュアルくらい読みましょう。
    • good
    • 0

> 上記1は  X > Y


> 上記2は  X > YY となりますが

xの値がわかりませんので、これらの不等式が
成り立つかどうかはわかりません。

ところで、strncpyは引数が3つ必要です。
仮に、strcpyのつもりであったとしても、
1バイトの領域yに2バイト('5'と'\0')を
無理矢理コピーすると、どこかでとんでもないエラーが
発生するかもしれません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!