C语言 memset函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 memset函数相关的知识,希望对你有一定的参考价值。

写了一个memset示例程序,运行后有乱码,请高手指教
____________________________分割线________________________________
#include<stdio.h>
#include<string.h>
void pr( char * );
void main()

char xx[10],*a,yy[20],*b;
a=(char *)memset(xx,'1',10);
b=(char *)memset(yy,'a',20);
pr(a);
pr(b);

void pr( char *ss )

int i;
for(i=0;i<strlen(ss);i++)

printf("%c ",ss[i]);

putchar('\n');

___________________________分割线______________________________
运行结果:

参考技术A memset
原型:extern
void
*memset(void
*buffer,
int
c,
int
count);
用法:#include
<string.h>
功能:把buffer所指内存区域的前count个字节设置成字符c。
说明:返回指向buffer的指针。
举例:
//
memset.c
#include
<syslib.h>
#include
<string.h>
main()

char
*s="Golden
Global
View";
clrscr();
memset(s,'G',6);
printf("%s",s);
getchar();
return
0;

相关函数:bzero,setmem,strset
参考技术B #include<stdio.h>
#include<string.h>
void pr( char * );
int main()

char xx[11],*a,yy[21],*b;

// 数组初始化,用字符串结束符:'\0'
memset(xx,'\0',sizeof(xx));
a=(char *)memset(xx,'1',sizeof(xx)-1);
pr(a);

memset(yy,'\0',sizeof(yy));
b=(char *)memset(yy,'a',sizeof(yy)-1);
pr(b);

return 0;

void pr( char *ss )

int i;
for(i=0;i<strlen(ss);i++)

printf("%c ",ss[i]);

putchar('\n');
本回答被提问者采纳
参考技术C 问题出在strlen上,strlen计算字符串长度时,是以结束符为‘0’计算的。如果字符数组最后一个是‘0’,就不会出现问题了 参考技术D printf("%d \n",strlen(ss)); //在这加一句你就知道了
for(i=0;i<strlen(ss);i++)
.....
第5个回答  2019-10-01 该说的二楼已经说很清楚了,我补充一点,就是这个函数常用来在malloc后,将这段内存空间清空(如置0),以防在使用时(尤其是字符串)读出内存的随机值。

c语言中函数memset()是啥意思?啥功能

如题

memset()的函数, 它可以一字节一字节地把整个数组设置为一个指定的值。 memset()函数在mem.h头文件中声明,它把数组的起始地址作为其第一个参数,第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。其函数原型为:
    void *memset(void*,int,unsigned);
  其中void*表示地址
    memset()的第一个实参是数组名,数组名作参数即数组作参数,它仅仅只是一个数组的起始地址而已。
  实现第一个memset()函数调用的内存布局见图7-3。 在函数memset()栈区,从返回地址往上依次为第1,2,3个参数。第1个参数中的内容是main()函数中定义的数组ia1的起始地址。第2个参数是给数组设置的值(0),第3个参数是数组的长度(50*2)。函数返回时,main()函数的数组中内容全置为0。
参考技术A memset()的函数, 它可以一字节一字节地把整个数组设置为一个指定的值。 memset()函数在mem.h头文件中声明,它把数组的起始地址作为其第一个参数,第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。其函数原型为:
    void *memset(void*,int,unsigned);
  其中void*表示地址
    memset()的第一个实参是数组名,数组名作参数即数组作参数,它仅仅只是一个数组的起始地址而已。
  实现第一个memset()函数调用的内存布局见图7-3。 在函数memset()栈区,从返回地址往上依次为第1,2,3个参数。第1个参数中的内容是main()函数中定义的数组ia1的起始地址。第2个参数是给数组设置的值(0),第3个参数是数组的长度(50*2)。函数返回时,main()函数的数组中内容全置为0。
中国物联网校企联盟技术部
参考技术B memset(地址指针, 值, 大小)将地址指向的区域连续大小的内存区域填充为值 参考技术C void *memset(void *s,int ch,size_t n);
函数解释:将 s 中前 n 个字节用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法.
请参考:
http://baike.baidu.com/view/982208.htm

以上是关于C语言 memset函数的主要内容,如果未能解决你的问题,请参考以下文章

C语言中,memset函数都可以给啥类型的数组清零?

C语言memset问题

在JAVA中有没有象C语言里的memset函数

c语言里有memset()怎么用?需要啥头文件?

C语言memset函数清空结构体成员数据

C语言 memset()函数(内存初始化函数)