本文简单分析了C/C++中常用函数的易错点,包括memset、sizeof、getchar等函数。分享给大家供大家参考之用。具体分析如下:
1.memset
1
2
|
#include <string.h>
void * memset ( void * buffer, int ch, size_t count );
|
将内存中buffer的前count个字节的内容全部设置为ch指定的ASCII值.经常用来初始化数组.复制时以字节为单位,如果buffer是int long,或者其他类型的指针时,需要注意不一定为数组的大小,应该是为 数组大小*sizeof(类型).推荐直接使用:
1
|
sizeof (buffer) //buffer是数组
|
2.sizeof
返回类型大小,以字节为单位.
对数组和指针是不同的.
1
2
3
4
5
|
int *p= new int [5];
int q[5]={0};
cout<< sizeof (p)<<endl;
cout<< sizeof (q)<<endl;
delete [] p;
|
输出值是不同的.(64位机器测试)
sizeof(p):p为指针,输出的是指针类型的大小,64位上64/8=8
sizeof(q):q为int类型的数组,输出的是数组所占字节数.4*5=20.
3.getchar
1
2
|
#include <stdio.h>
int getchar ( void );
|
这里getchar返回的是整形而不是char,若出现下面代码.
1
2
3
4
5
|
char c;
while ((c= getchar ())!=EOF)
{
XXX
}
|
这里c是被截断int类型的一部分,c可能无法容下所有字符,特别是EOF.
出现结果的可能,
1)某些字符截断后与EOF相同,导致程序在运行时正常终止
2)陷入死循环
3)有些编译器确实对c进行了截断处理,但是比较时,比较的 是getchar的返回值与EOF,导致程序看似"正常运行"
希望本文所述对大家的C/C++程序设计有所帮助。