c语言字符串函数初始化,一起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函数初始化后的结果

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值