53435


C言語系のポインタについての理解が浅すぎてこんなにも簡素なコードすら読めない私をお許し願います。ポインタの概念は理解しているつもりですが、つかいどころというのがどうにもわからなくて……

[code]

    #include <iostream>
    using namespace std;
    
    int main() {
        char s[256];
        cin >> s;
        if (s[0] == "h") {
            cout << s << endl;
        }
    
        return 0;
    }
    
[/code]

このプログラムが実行できないのはなぜか、正答例を踏まえてお教え願えませんでしょうか。  
意とする動作は  
＞入力受付  
＞最初の文字が”h"ならばその文字列をそのまま返す  
ただこれだけです。  
このプログラム、ポインタの定義は一度もしていないのにも関わらず、エラーで「ポインタと整数の評価」を吐かれてしまうため、これ以上踏み込みようがなくて困っています。  
どうかご回答よろしくお願い申し上げます。


CC BY-SA 4.0
2019-03-14T14:03:37.117
53432
2019-03-14T16:49:53.447
16877
question
c++
C++ポインタと整数間の評価についてのエラー


コードの中で

[code]

    if (s[0] == "h") {
    
[/code]

としていますが、これは`char`である`s[0]`と文字列の`"h"`を比べています。文字列は、実際には`const
char`の配列で、配列はポインタとして使われるので、そのようなエラーになります。エラーメッセージでポインタは`"h"`を、整数は`s[0]`を指しています。

正しくは、文字列の代わりに文字を使います。

[code]

    if (s[0] == 'h') { // シングルクォーテーションに替える
    
[/code]

* * *

これで動くのですが、せっかくC++を使っているので、`std::string`を使う方がいいです。今のコードでは、256文字以上入力すると、クラッシュするなど変なことが起こります。


CC BY-SA 4.0
2019-03-14T14:49:57.433
53435
2019-03-14T16:49:53.447
2019-03-14T16:49:53.447
3605
3605
53432
answer