1文字の比較をしたいとき

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kei

1文字の比較をしたいとき

#1

投稿記事 by kei » 15年前

初めまして。どうしてもわからないことがあるので質問させていただきます。

IF文などで分岐をするときに文字の比較をしたいのですが、
文字列であればstrncmp(~~で結果が == 0であるかどうかで判断しています。

ですが、1文字になると警告がでてきてしまいます。
strncmp("a", str_A[3], 1) == 0
といった感じでやっているのですが、この関数は文字列同士の比較するらしく
ポインタでないと危険だよ的なことを言われてしまいます。

警告は出てもプログラムは問題なく作動するのですが、他にやり方がありそうな気がします。

1文字の比較をするときはみなさんはどのようにしているでしょうか?

kei

Re:1文字の比較をしたいとき

#2

投稿記事 by kei » 15年前

動作環境を書き忘れていました。失礼いたしました。

OS:WinXP
開発環境:VS6

このような環境でやっております。

たかぎ

Re:1文字の比較をしたいとき

#3

投稿記事 by たかぎ » 15年前

普通に等価演算子や関係演算子で比較できます。

const char s[/url] = "abc";

if (s[0] == 'a')
{
...
}

といった感じです。

御津凪

Re:1文字の比較をしたいとき

#4

投稿記事 by 御津凪 » 15年前

> strncmp("a", str_A[3], 1) == 0

strncmp("a", &str_A[3], 1) == 0
か、
strncmp("a", str_A+3, 1) == 0

で、1文字の文字列として関数に渡せますよ。
警告が出るのは文字列(const char*)を渡すところに文字(char)を渡しているからです。

ですが、単なる比較ならば、
if('a' == str_A[3])
の方が良いです。

kei

Re:1文字の比較をしたいとき

#5

投稿記事 by kei » 15年前

なるほど、よくわかりました。ありがとうございます。

これで考えてみると、文字列比較をするときに
関数strncmpを使わずにFor構文などで1文字ずつ比較して
合ってるかどうかで比較することもできるんですね。
(面倒なのでstrncmpを使いますが)

勉強になりました。ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る