比较指针字符

时间:2017-03-07 10:49:57

标签: c++ pointers char

首先,我经常搜索并尝试过很多东西,但遗憾的是我的问题无法解决。

下面,我尝试比较两个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();
        }
    }
}

以下if if statments我也试过,但不幸的是,这也不起作用:

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

如果我打印出值,则它们彼此不相等。

1 个答案:

答案 0 :(得分:1)

由于您对C ++很陌生,所以正确的答案是:

请勿使用char*。尽量避免使用指针,如果必须使用指针,请使用unique_ptr之类的指针类。例如,一个简单的原因是,如果这些指针不仅仅指向某个范围内存在的某些其他变量,则必须管理内存。因此,如果使用指针,则很容易产生内存泄漏。 (也就是说,你可以使用指针,但通常你会在某些受控环境中执行此操作,例如包含在某个类中,如链接列表类,或者在需要多态的非常小的范围内 - 尽管在这种情况下也是如此您可以使用unique_ptrshared_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]进行比较。您可以照常And be aware that C-style is totally not C++-style, C-programmers will use pointers a lot, for instance.访问单个字母。看看你自己的更多功能:

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

那就是说,我只能从Baum mit Augen那里得到评论,得到一本书或阅读一些教程。 .container { display: flex; } #p-below:checked ~ .container { flex-direction: column-reverse; } #p-right:checked ~ .container { flex-direction: row-reverse; } #p-above:checked ~ .container { flex-direction: column; }

至于你的原始问题,一个本质上是一个数组的指针指向该数组的第一个元素。解除引用会生成该元素,而不是数组。如果你只是直接使用实际的数组,那么无论如何都不需要使用指针,对吗?