c语言中memset()的用法

Posted

技术标签:

【中文标题】c语言中memset()的用法【英文标题】:Usage of memset() in c 【发布时间】:2013-11-23 10:27:00 【问题描述】:

我写了一个小程序来习惯memset()的操作:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>

int main()

    int arr[10], i;
    int t = INT_MAX;
    memset(arr, t, sizeof(arr));
    for (i = 0; i < 10; i++)
        printf("%d\t",arr[i]);

    printf("%d",t);
    return 0;

上述程序的结果是:

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1

2147483647

上述程序中memset() 的行为是什么?为什么将数组元素设置为-1

【问题讨论】:

【参考方案1】:

memset 只取值的低八位,并用这些位填充整个缓冲区。 MAX_INT 的低 8 位全为 1 (0xFF),因此数组随后被全 1 填充。对于有符号整数,这是 -1。

【讨论】:

假设 int 是 32 位,一个 4 字节,你的意思是,memset 只使用位 0 到 7 来确定值,它们代表什么并将这个值放入目标内存位置?如果是,这也意味着 unsigned char 只能处理老式的 ascii? 我不确定我是否理解这个问题。位 0 到 7 是八位,比 ascii 多一位(如果不考虑奇偶校验)。但是是的,如果您想要一个大于 8 位的模式,您需要使用不同的函数(想到 wmemset)或 for 循环。 好的。你很好理解并回答了我的问题。谢谢。【参考方案2】:

Memset 将 arr 指向的内存块的第一个 sizeof(arr) 字节设置为 t 解释为无符号字符。因此,当您从 arr 读取整数时,您得到的结果取决于您平台上对这些字节的解释。

【讨论】:

以上是关于c语言中memset()的用法的主要内容,如果未能解决你的问题,请参考以下文章

在JAVA中有没有象C语言里的memset函数

C语言 memset函数及其用法

C语言memset问题

C语言中,memset函数都可以给啥类型的数组清零?

c语言里有memset()怎么用?需要啥头文件?

C语言中,memset函数都可以给啥类型的数组清零?