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


    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!
    ");
                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);

    以大多数人努力程度之低,根本轮不到去拼天赋~
  • 相关阅读:
    .NET 动态向Word文档添加数据
    .NET FileUpLoad上传文件
    Jquery 客户端生成验证码
    ASP.NET MVC 5 基本构成
    .NET 发布网站步骤
    Jquery 选择器大全
    .NET 知识整理笔记
    .NET 三层架构
    C#知识整理笔记
    .NET MD5加密解密代码
  • 原文地址:https://www.cnblogs.com/gcter/p/7412698.html
Copyright © 2020-2023  润新知