一些常见函数
1.void *memset(void *s, int c, size_t n);
函数解释:将s中前n个字节替换为c并返回s;
头文件<CString>
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
memset是按照字节来进行清除工作的,所以下面这种用法是错误的:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int a[5];
memset(a,1,5);//这里改成memset(a,1,5 *sizeof(int))也是不可以的
for(int i = 0;i < 5;i++)
cout<<a[i]<<" ";
system("pause");
return 0;
}
这样做的后果是将a数组的开头五个字节重置为0X0101010101,而不是将每个数组元素置为1.只有待重置的值为-1或0时才会将所有字节置为0X00000000或0X11111111.
2.void *memcpy(void *dest, const void *src, size_t n);
函数功能:由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内。函数返回一个指向dest的指针。
头文件:<CString>
1.source和destin所指内存区域不能重叠,函数返回指向destin的指针
2.与strcpy相比,memcpy并不是遇到'\0'就结束,而是一定会拷贝完n个字节。
3.如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,
要将目标数组地址增加到你要追加数据的地址。
3.FILE *freopen(char *filename, char *type, FILE *stream);
函数功能: 替换一个流,或者说重新分配文件指针,实现重定向。
头文件:<CStdio>
函数应用示例:
从文件in.txt中读入数据,计算加和输出到out.txt中
#include <iostream.h>
#include <cstdio.h>
using namespace std;
int main()
{
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
printf("%d\n",a+b);
fclose(stdin);
fclose(stdout);
return 0;
}
若要返回到显示默认 stdout) 的 stdout,使用下面的调用:
freopen( "CON", "w", stdout ); //输出到控制台"CON"
下面是短程序演示了 stdout 时重定向:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
FILE *stream ; //将内容写到file.txt, "W"是写 ("r"是读)
if((stream = freopen("file.txt", "w", stdout)) == NULL)
exit(-1); printf("this is stdout output\n");
stream = freopen("CON", "w", stdout);stdout 是向程序的末尾的控制台重定向
printf("And now back to the console once again\n");
}
size_t strlen( const char *string )
函数功能:计算字符串s的(unsigned int型)长度,不包括'\0'在内 。
它与sizeof()的区别:
sizeof()返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen是函数
char str[20]="0123456789"
sizeof(str)结果是20;
char* ss = "0123456789"; sizeof(ss) 结果 4 ===》ss是指向字符串常量的字符指针,sizeof 获得的是一个
指针的之所占的空间,应该是长整型的,所以是4
4、malloc/calloc/realloc
这三个函数都是用来进行内存分配的。包含在stdlib.h文件中。
malloc函数原型为extern void *malloc(unsigned int num_bytes);
calloc函数原型为void *calloc(unsigned n,unsigned size); 在内存的动态存储区中分配n个长度为size的连续空间。与molloc不同的是它将空间内容初始化为0;
realloc函数原型为extern void *realloc(void *mem_address, unsigned int newsize); 按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域,同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。mem_address必须为malloc或者calloc函数分配的地址指针
5、void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *));
参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针,用于确定排序的顺序
qsort 的函数原型是void __cdecl qsort ( void *base, size_tnum, size_t width, int (__cdecl *comp)(const void *, const void* ) )
{
return *(int *)a-*(int *)b;
}

浙公网安备 33010602011771号