试图让变量检查数组中的某些内容

Trying to make a variable check something inside an array

本文关键字:数组 变量 检查      更新时间:2023-10-16

这是我的函数

bool ft_numchecksingle(string user_num, int arr[])
{
bool check = false;
int mynum = stoi(user_num.substr(2, -1));
int len = sizeof(arr) / sizeof(arr[0]);
for (int x = 0; x <= len; x++)
{
if (mynum == arr[x])
check = true;
}
return (check);
}

这是阵列

int arr[] = { 213, 220, 560, 890 };

如果我在该数组中输入任何内容,它应该返回true,但是,如果我输入560或890,它总是返回false。

不能根据给定给函数的参数来确定数组的大小,因为数组参数会衰减为指针。

因此,在ft_numchecksingle函数中,以下行:

int len = sizeof(arr) / sizeof(arr[0]);

将为len分配指向int的指针的大小(在您的平台上可能为8字节(除以int的大小(可能为4字节(;这将是(在您的情况下(值2,这就是为什么您的函数只搜索数组的前两个元素[实际上,当考虑到我在下面的"EDIT"中提出的观点时,指针更有可能只有4个字节,因此在您的情况下,'len'值为1-然后您将只检查前两个元素,因为您的for循环中有x <= len!]

由于您的代码是C++,因此应该使用std::vector容器类,而不是"原始"数组;然后可以使用该类的.size()成员来确定"array"的大小。

或者,如果您真的必须使用原始数组类型,那么您需要将该数组的大小作为额外参数添加到函数中,如下所示:

bool ft_numchecksingle(string user_num, int arr[], size_t len)

然后,在您的main(或从任何地方调用该函数(中,您可以使用以下代码:

int arr[] = { 213, 220, 560, 890 };
//...
bool test = ft_numchecksingle("560", arr, sizeof(arr) / sizeof(arr[0]));
//...

(注意,在这里,编译器可以正确计算sizeof(arr)值!(

EDIT:重要的一点是,假设len变量中有数组的实际大小,那么该数组的最后一个元素将具有索引len - 1(而不是len(。因此,您的for循环应该是:

for (int x = 0; x < len; x++) 

而不是:

for (int x = 0; x <= len; x++) // When "x" EQUALS "len" you will be out-of-bounds!