请教函数memset的用法?

dullren1 2002-09-11 11:24:16
最近看书,有一个函数的使用不太明白:
memset
查到了此函数的用法,可是却不知道实际中如何用?
main()
{ char word[20];
……
memset(word,0,20);
……
}
在上面程序中,memset对数组的操作有何实际用处?

还有一个程序看不明白,在此也一同请教一下:
……
char xx[80][80];
int read(void)
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen("xx.xx","r"))==NULL) return 1;
while(fgets(xx[i],80,fp)!=NULL)
{ p=strchr(xx[i],\'n');
if(p)xx[i][p-xx[i]]=0;
i++;
}
fclose(fp);
return 0;
}
……
在此程序中,“ if(p)xx[i][p-xx[i]]=0; ”的作用是什么?
“ [p-xx[i]] ”的含义是什么?
...全文
88 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhgary 2002-09-12
  • 打赏
  • 举报
回复
我来解释好了,记得给我加分。p是一个指针,它不是在移动么,而xx[i]也是一个指针(指向首字符)而p=strchr(xx[i],\'n');实际是让p指向xx[i]这个指针所指向的字符串中的'\n'字符,也就是最后一个回车字符。然后p-xx[i]得到一个数字,就是这个字符串的长度了。
xx[i][p-xx[i]]=0;则就是把那个\n换成‘\0’ 方便后面处理字符串了。记得加分哦
dullren1 2002-09-11
  • 打赏
  • 举报
回复
小弟愚笨,还是不清楚p-xx[i]为何能表示回车符的位置?p-xx[i]的具体值如何算?劳驾!!
langhaixin 2002-09-11
  • 打赏
  • 举报
回复
函数名: memset
功 能: 设置s中的所有字节为ch, s数组的大小由n给定
用 法: void *memset(void *s, char ch, unsigned n);
程序例:

#include <string.h>
#include <stdio.h>
#include <mem.h>

int main(void)
{
char buffer[] = "Hello world\n";

printf("Buffer before memset: %s\n", buffer);
memset(buffer, '*', strlen(buffer) - 1);
printf("Buffer after memset: %s\n", buffer);
return 0;
}
blh 2002-09-11
  • 打赏
  • 举报
回复
对指定地址开始的一段长度的内存按照字节方式设置相同的值
最多的用处在于对数组或者一块被malloc分配的内存区付初值
梦断酒醒 2002-09-11
  • 打赏
  • 举报
回复
1.初始化
2.如果在第i行中有回车则将xx[i][p-xx[i]]置为0,即将回车符所在位置置0;[p-xx[i]] 就是回车符所在位置,p是回车符相对xx[i]的位置。
netsbull 2002-09-11
  • 打赏
  • 举报
回复
1 memset(word,0,20); 是把从地址word开始的20个sizeof(BYTE)的内存设置为零,也就是为你的数组清零。
2 if(p)xx[i][p-xx[i]]=0;
把他解开:
if( p!= NULL )
xx[i][p-xx[i]]=0;//p-xx[i] 只不过是下标而已

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧