柿子饼同学 发表于 2022-2-20 21:25:14

memset打印奇怪的值


#include <bits/stdc++.h>
using namespace std;

int main(){
      int a = {0};
      int i;
      memset(a, true, sizeof(a));
      for(i=0; i<=4; i++){
                printf("%d\n", a);
      }
      
      return 0;
}代码如上 , 就是想把a里面元素全都赋值为true , 但是回来打印奇怪的值 ,求帮助{:10_266:}

isdkz 发表于 2022-2-20 21:33:27

#include <bits/stdc++.h>
using namespace std;

int main(){
      bool a = {0};
      int i;
      memset(a, true, sizeof(a));
      for(i=0; i<=4; i++){
                printf("%d\n", a);
      }
      
      return 0;
}

jhq999 发表于 2022-2-20 21:42:03

本帖最后由 jhq999 于 2022-2-20 21:44 编辑

0x01010101=16843009
没啥可奇怪的,每个字节都赋值成1

柿子饼同学 发表于 2022-2-21 22:06:06

isdkz 发表于 2022-2-20 21:33


memset(a, 23, sizeof(a));
但是如果我就改成这样 , 数组不是还是int类型吗 , 但是还是打奇怪的值 , 不是23

柿子饼同学 发表于 2022-2-21 22:07:02

jhq999 发表于 2022-2-20 21:42
0x01010101=16843009
没啥可奇怪的,每个字节都赋值成1

谢谢回答 , 那4楼的问题又怎么办呢

柿子饼同学 发表于 2022-2-21 22:17:24

柿子饼同学 发表于 2022-2-21 22:07
谢谢回答 , 那4楼的问题又怎么办呢

哦哦哦我会了 , 只能赋值成-1和0 , 别的不行 , 谢谢~

人造人 发表于 2022-2-21 22:17:45

柿子饼同学 发表于 2022-2-21 22:06
但是如果我就改成这样 , 数组不是还是int类型吗 , 但是还是打奇怪的值 , 不是23

memset 是按字节填充,不是按 int 填充
$ cat main.c
#include <stdio.h>
#include <string.h>

int main(void) {
    int a;
    memset(&a, 0x23, sizeof(a));
    printf("%d\n", a);
    printf("%x\n", a);
    return 0;
}
$ gcc-debug -o main main.c
$ ./main
589505315
23232323
$

柿子饼同学 发表于 2022-2-21 22:20:46

柿子饼同学 发表于 2022-2-21 22:06
但是如果我就改成这样 , 数组不是还是int类型吗 , 但是还是打奇怪的值 , 不是23

我会了 , 谢谢回答

isdkz 发表于 2022-2-21 22:25:56

柿子饼同学 发表于 2022-2-21 22:06
但是如果我就改成这样 , 数组不是还是int类型吗 , 但是还是打奇怪的值 , 不是23

一个整数占了4个字节,1个字节8个位,1个16进制是4个位,也就是说一个字节两个16进制位,

23的 16 进制是 17,
将整数的每个字节都填充成16进制17就是 0x17171717,0x17171717的值就是 387389207

柿子饼同学 发表于 2022-2-22 18:25:16

人造人 发表于 2022-2-21 22:17
memset 是按字节填充,不是按 int 填充

谢谢

柿子饼同学 发表于 2022-2-22 18:25:49

isdkz 发表于 2022-2-21 22:25
一个整数占了4个字节,1个字节8个位,1个16进制是4个位,也就是说一个字节两个16进制位,

23的 16 进 ...

好吧 , 我还是用fill更好{:10_323:}
页: [1]
查看完整版本: memset打印奇怪的值