如何克服空指针初始化错误? (C / C ++)

时间:2016-02-19 04:29:39

标签: c++ arrays pointers

我很难弄清楚为什么在一个指针的NULL处初始化会破坏我的程序。

为了不收到编译错误,我的代码中的几乎所有指针都需要像往常一样初始化为nullptr。问题是,当我之后尝试使用它们时,我得到一大堆错误告诉我空指针无效。为了克服这个错误,现在将错误指针声明为数组。这样我初始化的所有问题都消失了。一切似乎工作正常,直到我意识到我的一个条件分支总是返回false。

完整的代码有点太长,有些部分使用法语单词,所以让我们只是粘贴我们感兴趣的内容......

struct Numero {
    int num;
    char client[50];
    Message *listeMessage = nullptr;
    Numero *suivant = nullptr;
    int nbmsg = 0;
};

char buff_char[50];
number = new Numero;
file >> number->client; // getting the right char client[50] from the file
if (number->client == buff_char)
                    break;

我也试过if(*number->client == *buff_char)但没有成功。我现在认为这个问题可能就是char的问题,但由于我之前的问题,我无法改变这一点,所以我希望有人能够弄清楚发生了什么这里。

注意:不要提出与字符串有关的任何内容,我不能使用它们,因为这是用指针练习的部分挑战。

3 个答案:

答案 0 :(得分:2)

number->client == buff_char

这两个都是数组,它们会衰减成指针。它们是两个不同的数组,有两个不同的地址,因此总是返回false。

*number->client == *buff_char

这会比较每个数组中的第一个元素,这也不是你想要的。

您可以使用标准库函数,例如strcmp

如果你不能使用标准库,循环遍历每个数组,直到一个元素的元素不同于另一个元素(不相等),它们都有'\0'(相等),或者它们都达到50 (相等)。

答案 1 :(得分:1)

If进行比较而不是作业

if (number->client == buff_char)

答案 2 :(得分:0)

在C ++中=是赋值运算符。您希望==获得平等。你的if语句现在做的是将client设置为buff_char,然后根据新分配的client值进行评估。