#include <stdio.h>
#include <stdlib.h>
#include <cstring>

int main()
{
    int size = 5 ;
    int* c = (int*)calloc(size,sizeof(int));
    memset(c,0,size*sizeof(int));    // when I input 1 or another value it doesn't work
    
    for (int i=0; i<size;i++){
        printf("values %d\n", c[i]);
    }
       
    free(c);
}

本程序的输出如下所示;

value 0
value 0
value 0
value 0
value 0

但是,如果我将0值更改为1:

value 16843009
value 16843009
value 16843009
value 16843009
value 16843009

我用calloc分离了内存.我想给我用Memset函数分配的这个内存地址赋值.当我在这里赋值为0时,赋值成功完成.我显示的是一个随机值,而不是我在该值之外给出的值.如何使用Memset函数成功执行此任务?

推荐答案

memset函数将给定内存段中的每个byte设置为给定值.因此,您不是将每个int设置为1,而是将每个int中的每个字节设置为1.

十六进制的十进制数字16843009是0x01010101,这说明这正是发生的事情.

如果要将每个int设置为非零值,则需要在循环中完成.

C++相关问答推荐

错误:八进制常数中的数字9无效

初始化char数组-用于初始化数组的字符串是否除了存储数组的位置之外单独存储在内存中

为什么写入系统调用打印的字符数不正确?

C语言中字符数组声明中的标准

增加getaddrinfo返回的IP地址数量

识别和处理c中整数溢出的最佳方法?

正确的TCP/IP数据包 struct

插座打开MacOS组件

C代码在字符串中删除不区分大小写的子字符串的问题

在vfork()之后,链接器如何在不 destruct 父内存的情况下解析execve()?

C整型和_泛型.哪些类型是兼容的?

为什么WcrTomb只支持ASCII?

C-try 将整数和 struct 数组存储到二进制文件中

将 struct 数组写入二进制文件时发生Valgrind错误

在文件描述符上设置FD_CLOEXEC与将其传递给POSIX_SPOWN_FILE_ACTIONS_ADCLOSE有区别吗?

在我的第一个C语言中观察到的错误';你好世界';程序

我错误地修复了一个错误,想了解原因

在列表中查找素数

如何转义包含指令中的字符?

文件指针引起的C程序分段错误