基于memset()函数的深入理解_C 语言

今天写软件工程大作业,调了半天的bug,原来是对memset函数认识不到位造成的。
int max[teachRelationNum];
memset(max,0,sizeof(max));
注意啊,可以使用sizeof(max),也可以使用 sizeof(int)*teachRelationNum,不可以直接使用 teachRelationNum,来初始化!
一般情况下,可以这样使用:
memset(max,0,sizeof(max));
memset(max,-1,sizeof(max));
memset(max,'a',sizeof(max));
而不能够赋初值为100之类的,要想赋初值为100,只能通过for循环了。
具体使用策略:
包含<string.h>
    char buffer[] = "Hello world\n";
  printf("Buffer before memset: %s\n", buffer);
  memset(buffer, '*', strlen(buffer) );
  printf("Buffer after memset: %s\n", buffer);
输出结果:
  Buffer before memset: Hello world
  Buffer after memset: ************
  int array[5] = {1,4,3,5,2};
  memset(array,0,5*sizeof(int));
输出结果:0 0 0 0 0
memset(array,1,5*sizeof(int));// 注意 这里与上面的程序不同
输出结果:16843009 16843009 16843009 16843009 16843009
因为memset是以字节为单位就是对array指向的内存的4个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是00000001000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了。
所以用memset对非字符型数组赋初值是不可取的!
  例如有一个结构体Some x,可以这样清零:
  memset( &x, 0, sizeof(Some) );
  如果是一个结构体的数组Some x[10],可以这样:
  memset( x, 0, sizeof(Some)*10 );
以上为对memset()的深刻研究,一部分是自己心得,一部分摘自百度百科。

 

时间: 2024-08-31 04:24:34

基于memset()函数的深入理解_C 语言的相关文章

基于getline()函数的深入理解_C 语言

我在网上搜了半天getline()函数,大多针对C++的,重载函数比较多,云里雾里的,而且没有实例,反正就是没有自己所需要的getline()函数.所以,自己在Linux下man了一把,并做了测试.getline()函数的功能是从文件中获取行信息,即每次读取一行信息. 因为我使用getline()函数的目的是获取本地网卡信息,即eth0的信息,从而判断启动机子时是否查了网线(本来可以从驱动里做,但应用层可以搞定,就不想多做处理了,谅解). //函数原型#define _GNU_SOURCE#in

C++中memset函数用法详解_C 语言

本文实例讲述了C++中memset函数用法.分享给大家供大家参考,具体如下: 功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作 用 法: void memset(void *s, char ch, unsigned n); 程序示例: #include <string.h> #include <stdio.h> #include <memory.h> int main(v

memset函数的使用分析_C 语言

1.void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c.2.例子 复制代码 代码如下: #includevoid main(){char *s="Golden Global View";clrscr();memset(s,'G',6);printf("%s",s);getchar();return 0;} 3.memset() 函数常用于内存空间初始化.如: 复制代码 代码如下: c

基于C语言sprintf函数的深入理解_C 语言

printf 可能是许多程序员在开始学习C语言时接触到的 第二个函数(我猜第一个是main),说起来,自然是老朋友了,可是,你对这个老朋友了解多吗?你对它的那个孪生兄弟sprintf了解多吗?在将各种类 型的数据构造成字符串时,sprintf的强大功能很少会让你失望.由于sprintf跟printf在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出.这也导致sprintf比printf有用得多.所以本文着重介绍sprintf,有时也穿插着用用 pritnf.

基于C语言string函数的详解_C 语言

PS:本文包含了大部分strings函数的说明,并附带举例说明.本来想自己整理一下的,发现已经有前辈整理过了,就转了过来.修改了原文一些源码的问题,主要是用char *字义字符串的问题,导致程序运行时崩溃.另外自己重写了部分测试程序,使其更能满足自己测试的需要.不当之处,还请海涵.@函数原型:  char *strdup(const char *s) 函数功能:  字符串拷贝,目的空间由该函数分配  函数返回:  指向拷贝后的字符串指针 参数说明:  src-待拷贝的源字符串 所属文件:  <s

深度探究C++中的函数重载的用法_C 语言

C++ 允许同一范围内具有相同名称的多个函数的规范.这些函数称为重载函数,"重载"中对其进行了详细介绍.利用重载函数,程序员可以根据参数的类型和数量为函数提供不同的语义. 例如,采用字符串(或 char *)参数的 print 函数执行的任务与采用"双精度"类型的参数的函数执行的任务截然不同.重载允许通用命名并使程序员无需创建名称,例如 print_sz 或 print_d.下表显示了 C++ 使用函数声明的哪些部分来区分同一范围内具有相同名称的函数组.重载注意事项

对C语言编程标准以及声明的基本理解_C 语言

c语言标准1978年,丹尼斯·里奇(Dennis Ritchie)和Brian Kernighan合作出版了<C程序设计语言>的第一版.书中介绍的C语言标准也被C语言程序设计师称作"K&R C",第二版的书中也包含了一些ANSI C的标准.K&R C主要介绍了以下特色: 结构(struct)类型 长整数(long int)类型 无符号整数(unsigned int)类型 把运算符=+和=-改为+=和-=.因为=+和=-会使得编译器不知道用户要处理i = +1

C语言中的sscanf()函数使用详解_C 语言

sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明: sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源. 其中的format可以是一个或多个 {%[*] [width] [{h |

C++的get()函数与getline()函数使用详解_C 语言

C++ get()函数读入一个字符 get()函数是cin输入流对象的成员函数,它有3种形式:无参数的,有一个参数的,有3个参数的. 1) 不带参数的get函数 其调用形式为 cin.get() 用来从指定的输入流中提取一个字符(包括空白字符),函数的返回值就是读入的字符. 若遇到输入流中的文件结束符,则函数值返回文件结束标志EOF(End Of File),一般以-1代表EOF,用-1而不用0或正值,是考虑到不与字符的ASCII代码混淆,但不同的C ++系统所用的EOF值有可能不同. [例]