2017-03-07 123 views
-2

首先,我搜索了很多,也嘗試了很多東西,但不幸的是沒有解決我的問題。比較指針字符

下面,我試着比較兩個char *值。但我不明白爲什麼這不起作用。我的意圖是,只有當temp不等於IDMilight時,此函數纔會執行sendCommand()。 如果對數據庫進行了調整,溫度值將會不同。 所以如果沒有任何調整,它必須延遲2秒並再次檢查。

我很新的C++,所以我希望有人能幫助我解決這個

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(); 
     } 
    } 
} 

下,如果statments我也試過,但不幸的是不起作用或者:

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

如果我打印這個值,它們不是彼此相等。

+5

你似乎對C++有不少誤解。你應該退後一步,系統地從一本好書中學習語言。 –

+0

@BaummitAugen是的,尤其是指針。順便說一句,代碼也可以編爲C. – Melebius

+0

@BaummitAugen,謝謝你的反應。你能告訴我這些誤解嗎? – Matthijs

回答

1

既然你是相當新的C++,正確的答案是這樣的:

不要使用char*。儘量避免使用指針,如果必須使用它們,請使用指針類,如unique_ptr。例如,一個簡單的原因是,如果這些指針不僅僅指向一些範圍內存在的其他變量,則必須管理內存。因此,如果你使用指針,內存泄漏很容易產生。 (也就是說,你可以使用指針,但是通常你可以在一些受控的環境中做這件事,比如包裝在某個類中,比如鏈表類,或者在需要多元化的非常小的範圍內 - 儘管在這種情況下你可以使用unique_ptrshared_ptr

基本上像通常使用的數組char*數組的指針應替換爲包裝數組的東西。在這種情況下,顯然std::string,它可以像char*一樣使用。在其他情況下,例如,您可以使用std::vector而不是int*int[]陣列。

現在,您可以從外部獲得一些您需要的SQL功能,沒關係,但嘗試限制某些東西保持char*的時間。將char*轉換爲字符串只需簡單地將它放在構造函數中:std::string my_string(functions_that_returns_char());,然後簡單地通過string_1 == string_2進行比較。您可以像往常一樣使用my_string[some_index]訪問單個字母。看看自己實現更多的功能:

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

這麼說,我只能從第二鮑姆MIT眼球的評論,得到一本書,或者通過一些教程閱讀。 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