编程中易犯错误集锦-持续更新。。。。。

C/C++中的memset

1. 需要的头文件

    C中为<memory.h> 或 <string.h>

    C++中为<cstring>

包含在 <string.h>头文件中
memset为内存填充函数,可以用它对一片内存空间进行初始化, 它可以一字节一字节地把整个数组设置为一个指定的值
其原型为
void *memset(void *s, int v, size_t n);
这里s可以是数组名,也可以是指向某一内在空间的指针;
v为要填充的值;
n为要填充的字节数,通常为sizeof(s);
使用memset时要注意的是,memset是逐字节进行填充,所以s一般为char *型。
如下就是约瑟夫问题中的应用:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
using namespace std;

int main()
{
    int m,n;
    while(true)
    {
        int i,j;
        int count=0;
        cin>>m>>n;
        if(m==0&&n==0)//m,n同时为0的时候退出
            break;
        char *str;
        if((str=(char *)malloc((m+1)*sizeof(char)))==NULL)//判断是否能够分配空间
        {
            printf("failed!\n");
            exit(0);
        }
        memset(str,'1',(m+1)*sizeof(char));//分配空间,赋初值
        int last=m,ptr=0;//last为计数当前还有多少个没报数的猴子,ptr为移动指针,指向剩下的猴子
        while(last>1)
        {
            ptr++;
            if(str[ptr]=='1')//如果还没报数,则处理
            {
                count++;
                if(count==n)//计数到了出列的数字
                {
                    count=0;//重新计数
                    str[ptr]='0';//数组置零
                    last--;//猴子的数目减少
                }
            }
            if(ptr==m)//指针移动到了最后一个猴子
            {
                ptr=0;
            }
        }
        for(int k=1;k<=m;k++)
        {
            if(str[k]=='1')
            {
                cout<<k<<endl;
                break;
            }
        }
        free(str);
        str=NULL;
    }
    return 0;
}
常量最大值: 0x7FFFFFFF 是long int的最大值
C语言库函数stdlib.h里面都包含什么

1 字符串转换
double atof (const char*);
int atoi (const char*);
long atol (const char*);
double strtod (const char*, char**);
long strtol (const char*, char**, int);
unsigned long strtoul (const char*, char**, int);

2 随机数
常量
#define RAND_MAX 0x7FFF rand的最大返回值
函数
void srand (unsigned int); 置随机数发生器(种子)
int rand (void); 返回下一个伪随机数

内存管理

常量
#define NULL ((void *)0) 空指针

函数
void* calloc (size_t, size_t); 分配内存, 并清零
void* malloc (size_t); 分配内存
void* realloc (void*, size_t); 重新分配内存, 返回新指针
void free (void*); 释放内存


4 与环境的接口
常量
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
函数
void abort (void);
void exit (int);
int atexit (void (*)(void));

int system (const char*);
char* getenv (const char*);


5 查找与排序
void* bsearch (const void*, const void*, size_t, size_t, 
int (*)(const void*, const void*));
void qsort (const void*, size_t, size_t,
int (*)(const void*, const void*));


6 整数运算
结构
typedef struct { int quot, rem; } div_t;
typedef struct { long quot, rem; } ldiv_t;
函数
int abs (int);
long labs (long);
div_t div (int, int);
ldiv_t ldiv (long, long);


7 多字节字符
常量
MB_CUR_MAX 多字节字符中的最大字节数
函数
size_t wcstombs (char*, const wchar_t*, size_t);
int wctomb (char*, wchar_t);
int mblen (const char*, size_t);
size_t mbstowcs (wchar_t*, const char*, size_t);
int mbtowc (wchar_t*, const char*, size_t);

posted @ 2017-08-22 17:32  A-inspire  Views(196)  Comments(0Edit  收藏  举报