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:} #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:44 编辑
0x01010101=16843009
没啥可奇怪的,每个字节都赋值成1
isdkz 发表于 2022-2-20 21:33
memset(a, 23, sizeof(a));
但是如果我就改成这样 , 数组不是还是int类型吗 , 但是还是打奇怪的值 , 不是23 jhq999 发表于 2022-2-20 21:42
0x01010101=16843009
没啥可奇怪的,每个字节都赋值成1
谢谢回答 , 那4楼的问题又怎么办呢 柿子饼同学 发表于 2022-2-21 22:07
谢谢回答 , 那4楼的问题又怎么办呢
哦哦哦我会了 , 只能赋值成-1和0 , 别的不行 , 谢谢~ 柿子饼同学 发表于 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:06
但是如果我就改成这样 , 数组不是还是int类型吗 , 但是还是打奇怪的值 , 不是23
我会了 , 谢谢回答 柿子饼同学 发表于 2022-2-21 22:06
但是如果我就改成这样 , 数组不是还是int类型吗 , 但是还是打奇怪的值 , 不是23
一个整数占了4个字节,1个字节8个位,1个16进制是4个位,也就是说一个字节两个16进制位,
23的 16 进制是 17,
将整数的每个字节都填充成16进制17就是 0x17171717,0x17171717的值就是 387389207 人造人 发表于 2022-2-21 22:17
memset 是按字节填充,不是按 int 填充
谢谢 isdkz 发表于 2022-2-21 22:25
一个整数占了4个字节,1个字节8个位,1个16进制是4个位,也就是说一个字节两个16进制位,
23的 16 进 ...
好吧 , 我还是用fill更好{:10_323:}
页:
[1]