strcmp()可以将动态字符数组与静态字符数组进行比较吗?

时间:2015-11-07 06:19:03

标签: c++ arrays

也许这是一个愚蠢的问题,但我问的原因是因为我使用strcmp()来比较动态数组和静态数组,而且它似乎给出了错误的结果。数组应该相等,但strcmp()返回false。当我暂停我的程序时,这些数组之间只有两个不同的东西是它们的内存位置。

我无法向您展示整个代码,但这是我的函数的一部分,其中包含以下两个变量:

stock * Table::retrieveStock(const char tick[])
{
    uint8_t index = hashing(tick);
    if (table[index])
    {
        bool test = strcmp(table[index]->data->getTick(), tick);
    //irrelevant code

以下是Table类中的一些指针的声明:

struct node
    {
        stock * data;
        node * next;
        node()
        {
            stock();
            next = nullptr;
        }
        node(stock *& item)
        {
            data = item;
            next = nullptr;
        }
    };
    node ** table;

我有一个类对象数组,无论如何,重点是我正在比较两个应该相等的刻度值。一个我用getTick()函数拉出对象:

const char * stock::getTick() const
{
    return tick;
}

并将一个传递给函数:const char tick[]。我对这里的代码有什么问题我很无能为力。我很乐意为你们提供更多的代码,但我看不出它会怎么做,只能让你解决这个问题更加困难。

编辑:也许这会有所帮助;我只想到了它。这正是我的编译器所说的值:

curr->data  0x005d93e8 {tick=0x005d9f38 "TSLA" name=0x005da100 "2" value=2.00000000 ...}    stock *

tick    0x004afb20 "TSLA"   const char *

1 个答案:

答案 0 :(得分:3)

strcmp()为匹配返回0(对于不匹配,返回非零)。它不会像您期望的那样返回truefalse