|
5鱼币
本帖最后由 方大侠 于 2019-4-20 21:38 编辑
void *memset(void *s, int c, size_t n);
参数 含义
s 指向要操作的内存空间
c 指定要填充的值
n 指定要填充 s 指向空间的前 n 个字节
- 1 #include<stdio.h>
- 2 #include<math.h>
- 3 #include<string.h>
- 4 #include<stdarg.h>
- 5 #include<stdlib.h>
- 6
- 7 #define N 10
- 8
- 9 int main(void){
- 10 int *ptr = NULL;
- 11 int i;
- 12
- 13 ptr = (int *)malloc(N * sizeof(int));
- 14 if(ptr == NULL){
- 15 printf("调用失败\n");
- 16 exit(1);
- 17 }
- 18
- 19 memset(ptr,1,N * sizeof(int));
- 20
- 21 for(i=0;i<10;i++){
- 22 printf("%d ",ptr[i]);
- 23 }
- 24 putchar('\n');
- 25
- 26 free(ptr);
- 27
- 28 return 0;
- 29 }
复制代码
memset(ptr,0,N * sizeof(int));运行是没问题的,但是改为memset(ptr,1,N * sizeof(int));结果就乱码了。。。
MacBook-Air:mylist f$ ./test
0 0 0 0 0 0 0 0 0 0
MacBook-Air:mylist f$ ./test
16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009
难道这里有什么无符号数吗,确实是填充的整型呀。。求指导
因为memset是按字节填充的,也就是memset(ptr,1,N)之后这段数据的每个字节都是0x01,
一个整数是4个字节,那么这个整数就是0x01010101=16843009。
|
最佳答案
查看完整内容
因为memset是按字节填充的,也就是memset(ptr,1,N)之后这段数据的每个字节都是0x01,
一个整数是4个字节,那么这个整数就是0x01010101=16843009。
|