char path[25500]= {};//iniatize
int visited[2500]= {0};//iniatialize
void fun();//protype
int main(){
fun();
}
void fun(){
visited[2300]=1;
path[0]='9';
printf("\n%d %s",visited[2300],path);
memset(path,0,25500);//reset
memset(visited,0,2500);//reset
printf("\n %d %s",visited[2300],path);//to see if resetted
}
输出是:
1 9
1
我想像开始一样重置。但正如您所看到的,memset不会重置。我的编译器是代码块。
答案 0 :(得分:7)
memset(visited,0,2500);//reset
Visited是一个整数数组,所以这应该是
memset(visited, 0, 2500 * sizeof(int))
答案 1 :(得分:3)
memset
设置 bytes 的数量,而不是元素的数量。改变这一行:
memset(visited,0,2500);
对于这样的事情它应该有效:
memset(visited, 0, 2500 * sizeof(int));
//or like this: memset(visited, 0, sizeof(visited));
答案 2 :(得分:0)
memset(visited, 0, 2500)
将0
指向的visited
设置为2500个字节。
然而visited
指的是更多的记忆,即其元素大小的2500倍。类型。那是2550 * sizeof(visitied[0])
。
所以
memset(visited, 0, 2500 * sizeof(visited[0])
0
visited
。
您的代码使用第2300个元素。因此,假设元素的大小为4
,它的偏移量为9200到visited
,则代码只有0
- 超出2500个字节,因此第2300个元素保持不受{ {1}}。
参考下面的评论:她在OP的上下文中使用memset()的完整代码片段:
memset()
上面的这个构造(第X行)可以通过将第3行替换为动态存储器分配的变化而无需调整:
#define VISITED_MAXIMUM (2500)
int visited[VISITED_MAXIMUM] = {0} /* line 3 */
/* Tons of code here . */
memset(visited, 0, VISITED_MAXIMUM * sizeof(*visited)); /* line X */