一起talk C栗子吧(第七十回:C语言实例--字符串初始化函数)



各位看官们,大家好,上一回中咱们说的是字符串查找的例子,这一回咱们说的例子是:字符串初始化函数。闲话休提,言归正转。让我们一起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 16

int 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函数初始化后的结果

各位看官,关于字符串初始化函数的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。


时间: 2025-01-13 16:37:19

一起talk C栗子吧(第七十回:C语言实例--字符串初始化函数)的相关文章

一起talk C栗子吧(第一百七十回:C语言实例--关闭终端中的回显功能一)

各位看官们,大家好,上一回中咱们说的是再谈内置宏的例子,这一回咱们说的例子是:关闭终端中的回显功能 .闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们今天介绍的是关闭终端中的回显功能,首先介绍一下什么是回显功能.当我们在终端中输入字符时终端马上就会显示我们输入的字符,这就是回显功能.我想这样的操作,大家已经司空见惯了,只是不知道它还有一个专业的名字:回显. 回显给我们带来了很多方便,比如我们可以及时看到自己输入到终端中的内容,而且当输入的内容有错误时还可以进行修改.这时有看官说:

一起talk C栗子吧(第十回:C语言实例--最小公倍数)

各位看官们,大家好.从今天開始,我们讲大型章回体科技小说 :C栗子.也就是C语言实例. 闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们,上一回中咱们说的是最大公约数的样例,这一回咱们说的样例是:最小公倍数. 看官们,最小公倍数和最大公约数类似. 两个整数中的公倍数有好多个,这些公约数中最小的一个就叫作 最小公倍数. 当然了.这是数学中的一个概念,假设不明确了,能够查阅相关的数学知识. 最小公倍数的求法有好几种.最经常使用的是通过最大公约数来求.由于两个数的最大公约数乘以它们的最小

一起talk C栗子吧(第一百三十五回:C语言实例--exec系列函数一)

各位看官们,大家好,上一回中咱们说的是"创建线程时的内存细节"的例子,这一回咱们说的例子是:exec系列函数.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们,我们在前面介绍创建进程内存细节的章回中提到过exec系列函数,当时并没有做详细的介绍.今天我们将和大家一起看看exec系列函数. exec系列函数可以把某个进程导入到调用exec系列函数的进程中,并且把当前进程替换成一个新的进程,在前面的章回中我们也介绍了,执行exec系列函数会触发写时复制,因此新进程拥有自己的代码区

一起talk C栗子吧(第二回:C语言实例--判断闰年)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C语言实例吧! 看官们,上一回中咱们给小说做了个开头,这一回咱们正式说C例子,这回说的例子是:判断闰年. 看官们,闰年是什么?这个是地理天文方面的概念.如果不明白的话,自己百度去,哈哈.我也偷一把懒. 看官们,判断闰年的方法有两种: 如果某年能被4整除,但是不能被100整除,那么这一年就是闰年. 如果某年能被400整除,那么这一年就是闰年. 看官们看到整除肯定想到除法了

一起talk C栗子吧(第二十回:C语言实例--括号匹配)

各位看官们,大家好,前几回中咱们说了堆栈的原理,并且举了实际的例子进行解说,这一回咱们说的例 子是:括号匹配.括号匹配使用了堆栈的原理,大家可以从例子看出来,所以我们把它们放在一起.闲话 休提,言归正转.让我们一起talk C栗子吧! 看官们,所谓的括号匹配,就是给了一连串括号,里面有各种类型的的括号,然后确定该串中的括号是否 是一一 匹配的.例如:({[]})这串括号中的括号就是匹配的.因为串中的括号都是成对出现.(({)这串括号就 不是匹配的,串中{没有与它配对的括号,而且与(匹配的括号数量

第一百七十五节,jQuery,工具函数

jQuery,工具函数 学习要点: 1.字符串操作 2.数组和对象操作 3.测试操作 4.URL 操作 5.浏览器检测 6.其他操作 工具函数是指直接依附于 jQuery 对象,针对 jQuery 对象本身定义的方法,即全局性 的函数.它的作用主要是提供比如字符串.数组.对象等操作方面的遍历. 一.字符串操作 在 jQuery 中,字符串的工具函数只有一个,就是去除字符串左右空格的工具函数: trim()去掉字符串两边空格 var str = ' jQuery '; alert(str); al

一起talk C栗子吧(第一百七十四回:C语言实例--关闭终端中的缓冲功能二)

各位看官们,大家好,上一回中咱们说的是关闭终端中缓冲功能的例子,这一回咱们继续说该例子.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们, 我们在上一回中介绍了如何关闭终端中的缓冲功能,当时是借助系统命令stty实现该功能的,这一回中我们将介绍另外一种关闭终端中回显功能的方法.该方法是通过终端的termios编程接口来操作终端的.关于termios接口的介绍和编程接口,我们在一百七十一回中介绍过了,因此,我们直接介绍如何通过termios编程接口来关闭终端缓冲功能. 下面是详细的操作步

第三百七十节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现搜索结果分页

第三百七十节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)用Django实现搜索结果分页 逻辑处理函数 计算搜索耗时 在开始搜索前:start_time = datetime.now()获取当前时间 在搜索结束后:end_time = datetime.now()获取当前时间 last_time = (end_time-start_time).total_seconds()结束时间减去开始时间等于用时,转换成秒 from django.shortcu

第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表

第三百七十五节,Django+Xadmin打造上线标准的在线教育平台-创建课程机构app,在models.py文件生成3张表,城市表.课程机构表.讲师表 创建名称为app_organization的课程机构APP,写数据库操作文件models.py models.py文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from __future__ import unicode_literals from datetime import datetim