【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 条评论
登录 后参与评论

相关文章

来自专栏Celebi的专栏

C/C++ 学习笔记七(内存管理)

工作中经常使用到C/C++,为对C有个比较深刻的了解,重新拾起学习C的任务。在看书的同时,记录下思考的过程,也记录下重要的知识点。

2330
来自专栏小狼的世界

This关键字的一些更新的理解

this是Javascript中一个非常重要的关键字,正确的使用this能够使我们的程序效率得到提升。之前,对于this的认识还存在一些误区,今天看了一篇文章之...

735
来自专栏小樱的经验随笔

【Python学习笔记之一】Python关键字及其总结

前言 最近在学习Java Sockst的时候遇到了一些麻烦事,我觉得我很有必要重新研究学习Python这种脚本语言,参考大神的经验,淘到了一本学习Python的...

2796
来自专栏C/C++基础

关于函数参数入栈的思考(函数调用约定,入栈顺序)

首先,要实现函数调用,除了要知道函数的入口地址外,还要向函数传递合适的参数。向被调函数传递参数,可以有不同的方式实现。这些方式被称为“调用规范”或“调用约定”。...

803
来自专栏栗霖积跬步之旅

1.7停止线程

线程停止:在线程处理完任务之前,停掉正在做的操作,也就是放弃当前操作。 在java中有三种方法可以实现线程的停止: 使用退出标志,使线程正常退出,也就是当run...

1990
来自专栏MasiMaro 的技术博文

C++继承

在封装的过程中,我们发现有很多地方有问题,比如我们在封装Windows API 的过程中,每个窗口都有各自的消息处理,而我们封装时不同的窗口要针对不同的消息而编...

772
来自专栏机器学习算法与Python学习

10个Python常见面试题,这些弄不明白不要说学过Python!

Python是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展,Python的职位需求越来越高。下面我收集了10个Python面试官经常问的问题,...

1273
来自专栏大神带我来搬砖

在python中像java一样反射——动态实例化指定包下面所有的类

在项目中需要在python中把某个包下面所有的类都实例化一个对象,把这些对象放到一个集合中,在java中可以通过反射机制来实现,先获得这个包下面所有的Class...

3737
来自专栏zlmai的专栏

C++中关于几种输入方法的总结

C++中有很多关于输入的函数,比如cin、cin.get()、cin.getline()、getline()、gets()等等,很容易搞混,下面分别总结下,欢迎...

2315
来自专栏zhangdd.com

nginx location匹配规则

~      #波浪线表示执行一个正则匹配,区分大小写 ~*    #表示执行一个正则匹配,不区分大小写 ^~    #^~表示普通字符匹配,如果该选项匹配...

984

扫码关注云+社区