【发布时间】:2021-08-09 07:33:06
【问题描述】:
我在用 c++ 解决问题时发现了一些奇怪的东西。
使用循环初始化整数数组效果很好,但使用 memset 函数初始化它会出错。
下面是示例程序。
#include <cstdio>
#include <limits>
#include <cstring>
using namespace std;
const int SIZE = 10;
const int INF = numeric_limits<int>::max();
int arr1[SIZE];
int arr2[SIZE];
void printArray(int *arr, int n)
{
for(int i = 0; i < n; i++)
printf("%-10d ", arr[i]);
}
int main()
{
// init with loop
for(int i = 0; i < SIZE; i++)
arr1[i] = INF;
printf("\nINIT WITH LOOP\n");
printArray(arr1, SIZE);
// init with memset
memset(arr2, INF, sizeof(arr2));
printf("\nINIT WITH MEMSET\n");
printArray(arr2, SIZE);
return 0;
}
结果:
INIT WITH LOOP
2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647
INIT WITH MEMSET
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
???? 我是否误解了如何使用 memset 函数?或者 ????是错误吗?
供您参考,我的编译器版本如下。
kimseokjin@MacBook-Air LovePS % g++ --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 12.0.5 (clang-1205.0.22.11)
Target: x86_64-apple-darwin20.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
【问题讨论】:
-
只需在 C++ 中使用
std::fill,这些错误就会消失。 -
memset(arr, 63, sizeof arr)应该适用于您的情况。 -
@amirali 你试过了吗?
-
如果您的问题是“我是在滥用 X 还是一个错误?”,通常是前者(除非是 PHP 问题)。
-
@DanielLangr 我用它将整数数组设置为某种无穷大。