ページ 11

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

Posted: 2010年3月11日(木) 15:05
by kei
初めまして。どうしてもわからないことがあるので質問させていただきます。

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

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

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

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

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

Posted: 2010年3月11日(木) 15:07
by kei
動作環境を書き忘れていました。失礼いたしました。

OS:WinXP
開発環境:VS6

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

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

Posted: 2010年3月11日(木) 15:12
by たかぎ
普通に等価演算子や関係演算子で比較できます。

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

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

といった感じです。

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

Posted: 2010年3月11日(木) 15:13
by 御津凪
> 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])
の方が良いです。

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

Posted: 2010年3月11日(木) 16:58
by kei
なるほど、よくわかりました。ありがとうございます。

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

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