2017-03-07 23 views
-2

まず第一に、私は多くを検索し、多くのことを試みましたが、残念なことに私の問題の解決策はありませんでした。ポインタの文字を比較する

以下、2つのchar *値を比較しようとしました。しかし、なぜこれがうまくいかないのか分かりません。この関数は、tempがIDMilightと等しくない場合にのみsendCommand()を実行することを意図しています。 データベースの調整がある場合、温度値は異なります。 調整がされていない場合は、2秒間遅延して再度確認する必要があります。

私はので、私はどちらか動作しませんので、私も試してみましたたstatments場合は、以下のが、残念ながら、誰かがこの

static char *IDMilight = new char; 
static char *temp = new char; 

void mysql_query_connection(){   
    if (!mysql_query(mysql1, "SELECT IDMilight, Hex FROM Milight ORDER BY IDMilight DESC LIMIT 1")) 
    { 
     MYSQL_RES* result = mysql_store_result(mysql1); 
     MYSQL_ROW row = mysql_fetch_row(result); 
     temp = row[0]; 

     if (*temp != *IDMilight) { 
      IDMilight = row[0]; 
      hexCode = row[1]; 
      sentCommand(); 
     } 
    } 
} 

で私を助けることを願ってC++にはかなり新しいです:

if (temp != IDMilight) 
if (&temp != &IDMilight) 

そして、私が値を印刷すると、それらは互いに同じではありません。

char*を使用しないでください:あなたがC++にはかなり新しいですので

+5

C++にはかなりの誤解があるようです。あなたは一歩踏み込んで、良い本から系統的に言語を学ぶべきです。 –

+0

@BaummitAugenはい、特にポインタです。ところで、コードはCとしてコンパイルすることもできます。 – Melebius

+0

@BaummitAugen、あなたの反応に感謝します。あなたは私に誤解を教えてもらえますか? – Matthijs

答えて

1

は、正しい答えはこれです。ポインタをまったく使わないようにしてください。ポインタを使用する必要がある場合は、unique_ptrのようなポインタクラスを使用してください。たとえば、単純な理由の1つは、ポインタがあるスコープ内に存在する他の変数を指していない場合、メモリを管理する必要があるということです。したがって、ポインタを使用するとメモリリークが非常に発生しやすくなります。 (つまり、ポインタを使用することはできますが、通常はリンクされたリストクラスのようないくつかのクラス内にラップされたような制御された環境や、多態性が必要な非常に小さな範囲でこれを行います。 unique_ptrまたはshared_ptrを使用することができます)

一般的に使用されるようなポインタは、通常はchar*のように配列をラップするもので置き換える必要があります。この場合、明確にstd::stringであり、これはchar*のように使用できます。他の場合、たとえばint*またはint[]アレイの代わりに、std::vectorを使用します。

ここでは、SQLに必要な機能がいくつかありますが、それは問題ありませんが、何かが残っている時間を制限しようとします。char*単純にコンストラクタに入れてchar*を文字列に変換してください:std::string my_string(functions_that_returns_char());、次に単純にstring_1 == string_2を比較してください。 my_string[some_index]で通常の1文字にアクセスできます。より多くの機能のために自分を見てください:言っ

http://www.cplusplus.com/reference/string/string/

は、私は二バウムMIT Augenからのコメントは、本を取得したり、いくつかのチュートリアルを読むことができます。 And be aware that C-style is totally not C++-style, C-programmers will use pointers a lot, for instance.

元の質問に関しては、基本的に配列のポインタは、その配列の最初の要素を指しています。逆参照は配列ではなく要素を生成します。実際の配列を単に直接使うことができるのであれば、ここでポインタを使用する必要はありません。

+0

あなたが説明したことは、それについて感謝しています。そしてあなたは正しいです、私は指示なしでそれを試してみます。 – Matthijs

+0

ありがとう、もう一度!それは今働いています;)ちょうど文字列にchar *を変換しました。 – Matthijs