memset不起作用(C)

时间:2014-06-08 13:17:56

标签: c memset

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不会重置。我的编译器是代码块。

3 个答案:

答案 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 */