一起talk C栗子吧(第七十回:C语言实例--字符串初始化函数)
来源:互联网 发布:php打印数组到文件 编辑:程序博客网 时间:2024/05/16 05:08
各位看官们,大家好,上一回中咱们说的是字符串查找的例子,这一回咱们说的例子是:字符串初始化函数。闲话休提,言归正转。让我们一起talk C栗子吧!
在定义局部变量的时候,我们需要对字符串进行初始化操作。当然了,手动给字符串初始化是可以的,不过标准库给我们提供了专门的初始化函数:memset。下面我们来介绍它的用法。
memset函数用法
- memset函数的原型:void *memset(void *s, int c, size_t count)
- memset函数的用法:在s指向的字符串中,把前count个字符赋值为c。
大家可以看到s为void类型的指针,因此,该函数也可以给某个内存区域进行赋值。此外,count经常使用sizeof(type)*n来表示,其中type是s的具体类型,n为数量。这样可以保证每块内存区域都能被正确地赋值。
光说不练,不是我们的风格,接下来,我们举一个实际的例子进行说明:
#define SIZE 16int main(){ char str[SIZE]; //定义一个局部变量,不进行初始化操作 printf("The old string is:%s \n",str); memset(str,'a',SIZE*sizeof(char)); printf("The setted string is:%s \n",str); return 0;}
下面是程序运行的结果:
The old string is:-$]�ģt� //没有初始化时输出乱码The setted string is:aaaaaaaaaaaaaaaa //初始化后输出正确的值
从上面的结果中,大家可以看到:字符串初始化前后的输出内容完全不同。
DIY memset函数
void *diy_memset(void *s,char c, int n)
下面我们发扬一下DIY的风格,自己定义一个memset函数。
- 1.从s所指字符串中取出一个字符,然后使用c给该字符赋值;
- 2.接着取s中的下一个字符,继续赋值;
- 3.重复步骤2,直到赋值n次时停止赋值。
下面是我写的代码,请大家参考:
void *diy_memset(void *s,char c, int n){ char *p = NULL; if(NULL == s) return NULL; p = s; while(n>0) { *p = c; p++; n--; } return s;}
下面是标准库中memset函数的代码,请大家和我们DIY的代码进行比较:
/** * memset - Fill a region of memory with the given value * @s: Pointer to the start of the area. * @c: The byte to fill the area with * @count: The size of the area. * * Do not use memset() to access IO space, use memset_io() instead. */void *memset(void *s, int c, size_t count){ char *xs = s; while (count--) *xs++ = c; return s;}
通过比较,大家可以可以发现,标准库的代码更加简洁一些,不过两者的赋值思路是相同的。
看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以点击这里下载。下面是程序的运行结果,请大家参考:
The old string is:-�_��w� //没有初始化时输出乱码The setted string is:aaaaaaaaaaaaaaaa //标准库函数初始化后的结果The setted string is:bbbbbbbbbbbbbbbb //DIY函数初始化后的结果
各位看官,关于字符串初始化函数的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。
0 0
- 一起talk C栗子吧(第七十回:C语言实例--字符串初始化函数)
- 一起talk C栗子吧(第七十一回:C语言实例--DIY shell)
- 一起talk C栗子吧(第七十二回:C语言实例--DIY date命令)
- 一起talk C栗子吧(第六十四回:C语言实例--DIY字符串复制函数)
- 一起talk C栗子吧(第六十五回:C语言实例--DIY字符串连接函数)
- 一起talk C栗子吧(第六十六回:C语言实例--DIY字符串比较函数)
- 一起talk C栗子吧(第六十七回:C语言实例--DIY字符串长度函数)
- 一起talk C栗子吧(第六十九回:C语言实例--DIY字符串查找函数)
- 一起talk C栗子吧(第六十八回:C语言实例--DIY字符串长度函数的小疑问)
- 一起talk C栗子吧(第一百七十六回:C语言实例--字符及字符串输入函数一)
- 一起talk C栗子吧(第一百七十七回:C语言实例--字符及字符串输入函数二)
- 一起talk C栗子吧(第一百七十八回:C语言实例--字符和字符串输出函数一)
- 一起talk C栗子吧(第一百七十九回:C语言实例--字符和字符串输出函数二)
- 一起talk C栗子吧(第五十九回:C语言实例--字符串概述)
- 一起talk C栗子吧(第六十回:C语言实例--字符串复制)
- 一起talk C栗子吧(第六十三回:C语言实例--字符串查找)
- 一起talk C栗子吧(第五十七回:C语言实例--main函数的参数)
- 一起talk C栗子吧(第一百八十六回:C语言实例--反正弦函数)
- HDU2859 Phalanx DP
- Java关键字instanceof
- 使用AsyncHttpClient碰到的问题及解决方法
- Redis 代理服务Twemproxy(redis分布式中间件)
- 数据库连接操作
- 一起talk C栗子吧(第七十回:C语言实例--字符串初始化函数)
- 数据库使用实例
- List<T>的各种排序方法
- 5-23 还原二叉树 (25分)
- java 中的StringBuffer
- STM32出现HardFault_Handler问题查找方法
- 对用户标识与鉴别的认识
- JSP文件是否有必要放在WEB-INF下
- 蓝缘博客网出售