c语言memset详解
void *memset(void *s, int ch, size_t n);(int ch可以是char或int)
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。
memset按字节赋值。
void *memset(void *s, int ch, size_t n);
常见错误
char buffer[20];memset(buffer,0,sizeof(char)*20);strcpy(buffer,"123");int some_func(struct something *a)
{
…
…
memset(a,,sizeof(a));
…
}
常见问题
#include "iostream.h"
#include "string.h"
#include <afx.h>
int main(){
char buf[];
CString str;
CString str1;
CString str2;
memset(buf,,sizeof(buf));
for(int i = ; i<; i++){
str.Format("%d",buf[i]);
str1 +=str ;
}
str2.Format("%d",str1);
cout<<str2<<endl;
system("pause");
return ;
}
这样写,有没有memset,输出都是一样
include <iostream>
#include <cstring>
using namespace std;
int main(){
char a[];
memset(a,'',);
for(int i = ;i < ;i++)
cout<<a[i]<<" ";
system("pause");
return ;
}
而,如下程序想把数组中的元素值设置成1,却是不可行的
#include <iostream>
#include <cstring>
#include <windows.h>
using namespace std;
int main()
{
int a[];
memset(a,,);//如果这里改成memset(a,1,5*sizeof(int))也不可以,因为memset按字节赋值。
for(int i = ;i < ;i++)
cout<<a[i]<<" ";
system("pause");
return ;
}
memset可以方便的清空一个结构类型的变量或数组。
如: struct sample_struct
{
char csName[];
int iSeq;
int iType;
};
对于变量 struct sample_strcut stTest;
一般情况下,清空stTest的方法:
stTest.csName[0]={'\0'};
stTest.iSeq=;
stTest.iType=;
用memset就非常方便:
memset(&stTest,0,sizeof(struct sample_struct));
如果是数组: struct sample_struct TEST[];
则 memset(TEST,,sizeof(struct sample_struct)*);
另外:
如果结构体中有数组的话还是需要对数组单独进行初始化处理的。
来自百度百科。http://baike.baidu.com/view/982208.htm
c语言memset详解的更多相关文章
- 深入理解C语言 - 指针详解
一.什么是指针 C语言里,变量存放在内存中,而内存其实就是一组有序字节组成的数组,每个字节有唯一的内存地址.CPU 通过内存寻址对存储在内存中的某个指定数据对象的地址进行定位.这里,数据对象是指存储在 ...
- c++、Java、python对应的编译型语言和解释性语言区别详解
1.首先明确一点: 高级语言是不能直接在CPU上运行的.CPU只能处理机器语言,就是黑客帝国里面那个10101010101110的数字流. 那么为了让机器语言能够在CPU上运行,那么就必须将其变成机器 ...
- C语言正则表达式详解 regcomp() regexec() regfree()详解
标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库 ...
- C语言指针详解
前言 这不是我第一次写关于C指针的文章了,只是因为指针对于C来说太重要,而且随着自己编程经历越多,对指针的理解越多,因此有了本文. 为什么需要指针? 指针解决了一些编程中基本的问题. 第一,指针的使用 ...
- 小程序脚本语言WXS详解
WXS脚本语言是 Weixin Script脚本的简称,是JS.JSON.WXML.WXSS之后又一大小程序内部文件类型.截至到目前小程序已经提供了5种文件类型. 解构小程序的几种方式,其中一种方式就 ...
- Canny边缘检测算法原理及C语言实现详解
Canny算子是John Canny在1986年提出的,那年老大爷才28岁,该文章发表在PAMI顶级期刊上的(1986. A computational approach to edge detect ...
- Go语言interface详解
interface Go语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的方便,当你看完这一章,你就会被interface的巧妙设计所折服. 什么是interface 简单 ...
- C语言关键字详解
相对于其他语言来说,C语言的关键字算是少的了.在C98中关键子总共只有32个,我们来分析一下每个关键字在C语言中它独特的作用. 1.关于数据类型的关键字 (1) char :声明字符型变量或函数 ( ...
- C语言typeof详解 offsetof
http://blog.chinaunix.net/uid-28458801-id-4200573.html 前言: typeof关键字是C语言中的一个新扩展,这个特性在linux内核中应用非常 ...
随机推荐
- 帝国cms栏目死变量
这里为帝国学习者们放出帝国学习者们会用到的栏目死变量,不需要灵动或者万能标签能调用,在任何位置都能使用 栏目路径:<?=$public_r[newsurl].$class_r[1]['class ...
- C#共享内存类改进版
原文 C#共享内存类改进版 改进说明及源码实例下载见:http://blog.csdn.net/zzh8845/archive/2008/11/22/3349963.aspx ShareMem.cs ...
- android studio 快捷笔记
setting->editor->打勾 ctrl+Q ctrl+tab alt+回车 ctrl+shift+回车
- MySQL对于有大量重复数据表的处理方法
需要在MySQL的一张innodb引擎的表(tableA)上添加一个唯一索引(idx_col1_u).但是对于每个key(col1)表中已经有大量重复数据.此时,做数据的手工清理,或者SQL处理是非常 ...
- A Brief Introduction to Multiset[STL]
基础 multiset是<set>库中一个非常有用的类型,它可以看成一个序列,插入一个数,删除一个数都能够在O(logn)的时间内完成,而且他能时刻保证序列中的数是有序的,而且序列中可以存 ...
- 使用回调接口实现ActiveX控件和它的容器程序的通讯
本文阅读基础:有一定的C++基础知识(了解继承.回调函数),对MFC的消息机制有一定了解,对COM的基础知识有一定了解,对ActiveX控件有一定了解. 一. 前言 ActiveX控件和它的容器程序如 ...
- Kapit控件方法笔记
r.kapit.visualizer.renderers.DefaultItemRenderer //整个节点添加click处理函数对象类型 fr.kapit.visualizer.controls. ...
- [Leetcode]-containsNearbyDuplicate
//题目: //给定一个整数数组与一个整数k,当且存在两个不同的下标i和j满足nums[i] = nums[j]而且| i - j | <= k时返回true.否则返回false. #inclu ...
- Qt5 FOR WINCE7, Visual Studio 2008环境的搭建
Qt5 FOR WINCE7, Visual Studio 2008环境的搭建 Qt5发布时,试过配置Qt5 for wince的环境,原因是暂时不支持WINCE.前几天意外发现官方博客说明已经开始支 ...
- python 面试相关
python单例模式: Python真的需要单例模式吗?我指像其他编程语言中的单例模式. 答案是:不需要! 因为,Python有模块(module),最pythonic的单例典范.模块在在一个应用程 ...