容易混淆的函数

容易混淆的几个函数:

(1)memset

函数原型:void *memset(void *s, int ch, size_t n)

解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s

作用:是在一段内存块中填充某个给定的值,它是对较大的结构体数组进行清零操作的一种最快方法。

应用:如果要把一个char a[20]清零,一定是 memset(a,0,20);

举例:

charbuffer[4];
memset(buffer,0,sizeof(char)*4);
strcpy(buffer,"123");
/
///"123"中最后隐藏的'\0'占一位,总长4位。
这里的 memset 是多余的. 因为这块内存马上就被全部覆盖,清零没有意义。

charbuffer[20];
memset(buffer,0,sizeof(char)*20);
memcpy(buffer,"123",3);
/
///这一条的memset并不多余,memcpy并没把buffer全部覆盖,如果没有memset,
///用printf打印buffer会有乱码甚至会出现段错误。
///如果此处是strcpy(buffer,"123");便不用memset,strcpy虽然不会覆盖buffer但是会拷贝字符串结束符
这种情况下memset并不多余,因某些 编译器 分配空间时,内存中默认值并不为0:

用memset对非字符型 数组赋初值是不可取的!
例如有一个 结构体Some x,可以这样清零:
memset(&x,0,sizeof(Some));
如果是一个 结构体数组Some x[10],可以这样:
memset(x,0,sizeof(Some)*10);

(2)fwrite   参考:http://blog.chinaunix.net/uid-10747583-id-120041.html

 fwrite (buffer , sizeof(buffer), 1 , pFile );

(3)itoa、atoi、atof、atoiatolstrtodstrtolstrtoul

itoa是广泛应用的非标准C语言扩展函数。由于它不是标准C语言函数,所以不能在所有的编译器中使用。但是,大多数的编译器(如Windows上的)通常在<stdlib.h>头文件中包含这个函数。

char* itoa(int value,char* string,int radix);
int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等
举例:

#include<stdlib.h>

#include<stdio.h>

intmain()
{
int number=123456;
char string[25];
itoa(number,string,10);
printf("integer=%dstring=%s\n",number,string);
return 0;
}

atof:  把字符串转换成浮点数

#include<stdlib.h>
#include<stdio.h>
intmain()
{
doubled;
char*str="12345.67";
d=atof(str);
printf("string=%sdouble=%lf\n",str,d);
return0;
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值