memset 设置的值不正确

Posted

技术标签:

【中文标题】memset 设置的值不正确【英文标题】:memset is setting value incorrectly 【发布时间】:2014-04-13 09:48:47 【问题描述】:

这个函数在我的程序中被调用:

int cal_addr(long file_size ,  long* block, file* isfile,unsigned long block_size;) 


        long double tmp = (long double) file_size/block_size;
        *block = ceil (tmp ) ;
        int start = us.alloc_index ;    // us.alloc_index is int

        int fd = fs.tot_alloc_file ;  //  fs.tot_alloc_file is int
        int blk = *((int*)block) ;
        size_t s =  (blk) * sizeof(int) ;
    // us.usage is global array of integers
        memset(& (us.usage[start] ), fd , s);
        us.alloc_index =  us.alloc_index + (*block) ;
        isfile->end_addr_usage = us.alloc_index;
        return 1 ;

// gdb 的输出如下。当我打印时,我看到 fd 值仍然为 1 us.usage[202] 的元素,例如它具有这个奇怪的值。不是我期望的 1 个

(gdb) p us.usage[202]
$3 = 16843009

(gdb) p fd
$5 = 1
(gdb) 

【问题讨论】:

【参考方案1】:

memsetchar-by-char 基础上运行。您不能像这样使用它来设置ints 的值。 (注意16843009 == 0x01010101。)

如果要设置ints 的值,则需要使用循环。

【讨论】:

非常感谢。很有帮助。

以上是关于memset 设置的值不正确的主要内容,如果未能解决你的问题,请参考以下文章

使用 memset 时,阵列未正确重置

memset为int型数组初始化问题

在 memset 之后未写入结构数组的值

c语言中函数memset()是啥意思?啥功能

memset()函数及其作用

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