试图让变量检查数组中的某些内容
Trying to make a variable check something inside an array
这是我的函数
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!
相关文章:
- 具有推导参数的模板函数指针数组变量
- 按字母顺序对结构内数组变量中的名称进行排序
- 传递 std::数组变量作为参数
- 为什么数组变量正在更新
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 类中的数组变量C++导致"was not declared in this scope"实现文件的一个函数中错误,但在构造函数中不会导致错误
- 数组变量中更多变量或更多维度?
- 数组变量周围的堆栈已损坏
- 数组变量衰减为指针
- C++ 无法将字符数组变量分配给字符串变量
- 使用指针变量打印特定的数组变量
- 数组变量是C++中的引用吗?
- 数组变量未正确分配以进行循环
- 在 c++ 中向数组变量添加一个数字
- 如果数组变量在 c# 代码中定义为“ref”参数,则如何传递数组变量
- 指针和 c 样式数组变量的专用模板
- 堆栈数组变量清理
- 如何从DLL检索数组变量?(视觉C )
- 如何将初始值设定项与右值引用参数一起使用 // 为什么不能使用另一个 C 样式数组变量初始化 C 样式数组
- 更改了错误的数组变量