我在C中创建了一个int
数组,并用0初始化它,如下所示 -
int f[10000] = {0};
我的程序要求我在循环结束时重新初始化此数组。所以,我执行了这一步 -
f[10000] = 0;
但这没效果。我甚至试过
f[10000] = {0};
但也有错误。最终,我不得不使用memset
。任何人都可以帮助,因为错误发生在哪里以及为什么?
额外信息 - 我使用ideone.com进行编码
作为参考,这是完整的代码 -
#include <stdio.h>
int main(void) {
int t, n, k, f[10000] = {0}, c[10000] = {0}, i, v, count = 0;
scanf("%d", &t);
while (t--) {
scanf("%d %d", &n, &k);
for (i = 1; i <= n; i++) {
scanf("%d", &v);
if (v == i) {
f[i] = 1;
}
c[v]++;
}
for (i = 1; i <= n; i++) {
if (!f[i] && c[i] >= k) {
count++;
}
}
printf("%d\n", count);
count = 0;
memset(f, 0, 10000);
memset(c, 0, 10000);
//f[10000] = 0; this didn't worked
//c[10000] = 0; this didn't worked
}
return 0;
}
答案 0 :(得分:7)
在C中,初始化与赋值不同,尽管两者都使用=
。
int foo[3] = { 0 };
表示&#34;使foo
成为三个整数的数组,全部初始化为零&#34;,但foo[3] = 0;
表示&#34;将foo
的第四个元素设置为零&#34 ;.显然不同。
由于memset()
以字节为单位,因此:
memset(f, 0, 10000);
错了,应该是:
memset(f, 0, sizeof f);
只要f
是您的代码中的正确数组。
另外要注意,作为自动变量的非常大的数组可能不是非常便携。
答案 1 :(得分:1)
如果你喜欢这个
int f[10000] = {0};
然后
f[10000] = 0;
是错误的,因为索引在C中从0开始,所以你在数组边界外写字。
答案 2 :(得分:0)