我很难弄清楚为什么在一个指针的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的问题,但由于我之前的问题,我无法改变这一点,所以我希望有人能够弄清楚发生了什么这里。
注意:不要提出与字符串有关的任何内容,我不能使用它们,因为这是用指针练习的部分挑战。
答案 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值进行评估。