1、创建一个内存区域的时候,内存中的数据是乱七八糟的(可能是其他代码用过后遗留的数据):
char ch1[20];
printf("%s\n",ch1);
这个代码打印出来的可能就是乱码,因为printf的%s是“打印一直遇到'\0'”。
2、解决问题的两种方法:
1) memset(void *,要填充的数据,要填充的字节个数)
char ch1[20];
memset(ch1,0,sizeof(ch1));
printf("%s\n",ch1);
思考:如果把memset(ch1,0,sizeof(ch1)); 改成memset(ch1,50,sizeof(ch1)); 为什么会多输出点东西?
2)char ch1[20] ={0}; 对于长度为20字节的这段内容全部填充为0。原理:int num[10]={3,5};//前两个分别填充3和5,之后都填充为0。
18ptrMemoryInitialization.c
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
//char str[20]; //这里申请的20个字节的内存可能被别人用过
//char str[20] = {3,5,6}; //如果给的初始值小于数组的初始长度剩下的补0
char str[20] = {}; //20个元素都初始化为0
//printf("%s\n",str); //正常不清零会打印乱码,因为其中的内容是之前程序使用者留着的
//memset(str,88,sizeof(str)); //为char数组赋值88,使用memset、memcpy等函数需要包含string.h
//程序使用完时最好用该方法清空内存
//str[19] = '\0'; //这是用认为的办法将最后一个元素设置为 \0 ,作为字符串的终点
//printf("%s\n",str);
//memset(str,0,sizeof(str)); //通常会这样使用这个方法,为新申请的内存清零
//以下遍历每个内存地址并以int类型打印出来
int i;
for(i=0;i<sizeof(str)/sizeof(char);i++)
{
printf("%d|",str[i]);
}
return 0;
}