【C语言基础】内存的初始化

我们编写C语言的时候需要给变量申请一块内存区域,当我们创建一个内存区域的时候,内存中的数据十有八九是乱七八糟的(因为其他代码用过后遗留的数据并没有及时清掉)

int main()

{

char str[10];//分配的10个字节的内存可能被用过;

printf("%s\n",str);//这个代码打印出来的可能就是乱码,因为printf的%s是“打印一直遇到'\0'"

return 0;

}

那么,有什么方法可以解决呢?

这里有两种解决问题的方法:

第一种:

使用menset函数为新申请的内存做初始化工作

menset(void*,要填充的数据,要填充的字节个数)

int main()

{

char str[10];//编译器自动分配10个字节的内存大小

memset(str,0,sizeof(str));//sizeof()计算字节大小

printf("%s\n",str);

return 0;

}

第二种:

char str[10] ={0}; 对于长度为10字节的这段内容全部填充为0。原理:int num[10]={6,8,5};//前三个分别填充6、8和5,之后都填充为0;

最后补充:

void *memset(void *str, int ch, size_t n);

函数解释:将str中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 str 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。

memset是计算机中C/C++语言函数。将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。

转自:http://blog.csdn.net/baidu_34919559/article/details/51341053

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2018-03-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端之路

JS浅拷贝与深拷贝的学习记录

733
来自专栏康怀帅的专栏

JavaScript 基础

JavaScript 基础语法介绍。 特例 var a = (1,2,3); // 取右边的数值 a = 3 调试 var x = 15 * 5; debugg...

2614
来自专栏代码世界

Python之函数基础

1、函数的定义与调用 函数从大方针上考虑总共分为两种:一种是内置函数,另一种是自定义函数。今天主要讲的是自定义函数。 s = '金老板小护士' #len(s) ...

2699
来自专栏Golang语言社区

【Go 语言社区】Go语言学习-接口赋值

在go语言中,接口赋值分为2中情况: 1、将对象实例赋值给接口; 2、将一个接口赋值给另一个接口。 1、将对象实例赋值给接口: 要求对象实现了接口...

3064
来自专栏小白客

Python基础学习-列表简介

一:列表是什么? 1 定义:列表是由一系列按特定顺序排列的元素组成。在Python中,用方括号[]来表示列表,并用逗号来分割其中的元素。 例: ? 输出: ? ...

3245
来自专栏海天一树

小朋友学C++(6):this指针

this指针是一个隐含于类中的特殊指针,指向对象本身。也就是说对象一旦被创建,this指针也就存在了。 就好比你的名字叫做Teodoro,别人说你的时候用的是T...

2506
来自专栏移动端开发

Swift 内存管理详解

Swift内存管理: Swift 和 OC 用的都是ARC的内存管理机制,它们通过 ARC 可以很好的管理对象的回收,大部分的时候,程序猿无需关心 Swift...

1829
来自专栏蓝天

常见指针定义解读

最近做的C/C++技术面试比较多,发现了一些共同的问题,对于如下所示的指针认识,多数面试者都答错了,作为过来人,这种情况还可以理解的,放在一起确实有些复杂。 ...

451
来自专栏Java帮帮-微信公众号-技术文章全总结

int与integer的区别

int与integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1...

3646
来自专栏Laoqi's Linux运维专列

python3–元祖+列表+字典

1444

扫码关注云+社区