• 締切済み

C言語 文字列 比較に関する質問

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のシングルコーテーションとして  比較する関数を教えてください    

みんなの回答

  • venzou
  • ベストアンサー率71% (311/435)
回答No.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' }; 上記の二つは同じ内容になります。分かるかな?

wildwolf
質問者

お礼

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

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.4

文字と文字列の違いをまず理解しましょう。教科書をよく読んでください。 ””でくくられた文字列定数(リテラル)は、基本的には <や>などによる比較は意味を持ちません。 現在の多くのコンピュータではASCIIを使っていますので 5<'5'ですが、メインフレームなどだと 5>'5' となるマシンもありえます(たとえばEBCDICを使っていて文字リテラルがsignedの場合)。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★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言語の特徴(文字列とは?)をお勉強して下さいね。 ・以上。おわり。

  • koko_u
  • ベストアンサー率12% (14/116)
回答No.2

何がしたいのかサッパリですが。 atoi のシグニチャは atoi( const char* ) なので間違ってるし、そもそも atoi は最早使われない関数。 ついでに strncpy のシグニチャは strncpy( char*, const char*, size_t ) マニュアルくらい読みましょう。

noname#26650
noname#26650
回答No.1

> 上記1は  X > Y > 上記2は  X > YY となりますが xの値がわかりませんので、これらの不等式が 成り立つかどうかはわかりません。 ところで、strncpyは引数が3つ必要です。 仮に、strcpyのつもりであったとしても、 1バイトの領域yに2バイト('5'と'\0')を 無理矢理コピーすると、どこかでとんでもないエラーが 発生するかもしれません。

関連するQ&A

専門家に質問してみよう