C语言函数大全-- m 开头的函数

news2024/11/14 21:31:09

C语言函数大全

本篇介绍C语言函数大全-- m 开头的函数

1. malloc

1.1 函数说明

函数声明函数功能
void *malloc(size_t size);用于动态分配内存

参数:

  • size : 需要分配的内存大小(以字节为单位)

返回值:

  • 如果分配成功,返回分配的内存块的指针;
  • 如果分配失败,则返回 NULL。

1.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *str = NULL;

    // 分配内存
    str = (char *)malloc(20 * sizeof(char));

    if (str == NULL)
    {
        printf("Failed to allocate memory.\n");
        return 1;
    }

    // 将字符串复制到内存中
    strcpy(str, "Hello, world!");

    // 输出字符串
    printf("%s\n", str);

    // 释放内存
    free(str);

    return 0;
}

在上面的示例程序中,

  • 我们首先声明一个指向字符型的指针 str,并将其初始化为 NULL
  • 然后使用 malloc() 函数动态分配了 20 字节的内存空间,并将其赋值给 str 指针;
  • 接下来,我们使用 strcpy() 函数将字符串 "Hello, world!" 复制到内存中,并使用 printf() 函数输出字符串;
  • 最后,我们使用 free() 函数释放了分配的内存空间。

1.3 运行结果

在这里插入图片描述

2. mblen

2.1 函数说明

函数声明函数功能
int mblen(const char *s, size_t n);检查多字节字符的长度

参数:

  • s : 指向待检查的多字节字符或多字节字符序列的指针
  • n : 要检查的最大字节数

注意:如果 s 是空指针,则返回 0,表示不是多字节字符;否则,如果 n 不足以包含完整的多字节字符,则返回 -1,表示需要更多的输入;否则,返回多字节字符所需的字节数。

2.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main()
{
    // 设置本地化环境
    setlocale(LC_ALL, "");

    char str[] = u8"你好,世界!";
    int len;

    // 检查第一个字符的长度
    len = mblen(str, MB_CUR_MAX);

    if (len == -1)
    {
        printf("Failed to determine the length of the multibyte character.\n");
        return 1;
    }

    printf("The length of the first multibyte character is %d bytes.\n", len);

    return 0;
}

在上面的示例程序中,

  • 我们首先使用 setlocale() 函数设置本地化环境,以便正确处理多字节字符。
  • 然后我们定义了一个包含中文字符的字符串 str
  • 接着使用 mblen() 函数检查第一个字符的长度,并将其保存到变量 len 中。
  • 最后,我们输出该字符的长度。

2.3 运行结果

在这里插入图片描述

3. mbrlen

3.1 函数说明

函数声明函数功能
size_t mbrlen(const char *s, size_t n, mbstate_t *ps);检查多字节字符的长度

参数:

  • s : 指向待检查的多字节字符或多字节字符序列的指针
  • n : 要检查的最大字节数
  • ps : 描述转换状态的 mbstate_t 结构体的指针

注意: 如果 s 是空指针,则返回 0,表示不是多字节字符;否则,如果 n 不足以包含完整的多字节字符,则返回 (size_t)-2,表示需要更多的输入;否则,如果 psNULL,则使用默认转换状态;否则,将 ps 的值更新为已经转换的字符数,并返回多字节字符所需的字节数。

3.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>

int main()
{
    // 设置本地化环境
    setlocale(LC_ALL, "");

    char str[] = u8"你好,世界!";
    int len;

    // 检查第一个字符的长度
    len = mbrlen(str, MB_CUR_MAX, NULL);

    if (len == (size_t)-2) // 特殊的返回值,表示发生了错误
    {
        printf("Failed to determine the length of the multibyte character.\n");
        return 1;
    }

    printf("The length of the first multibyte character is %d bytes.\n", len);

    return 0;
}

在上面的示例程序中,

  • 我们首先使用 setlocale() 函数设置本地化环境,以便正确处理多字节字符。
  • 然后我们定义了一个包含中文字符的字符串 str
  • 接着使用 mbrlen() 函数检查第一个字符的长度,并将其保存到变量 len 中。
  • 最后,我们输出该字符的长度。

3.3 运行结果

在这里插入图片描述

4. mbrtowc

4.1 函数说明

函数声明函数功能
size_t mbrtowc(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps);将多字节字符转换为宽字符

参数:

  • pwc : 一个指向宽字符的指针,表示将要存入转换后的宽字符;
  • s : 一个指向多字节字符或字符序列的指针;
  • n : 一个表示最多转换的字节数的整数;
  • ps : 一个指向转换状态的指针,如果为 NULL,则使用默认转换状态。

返回值:

  • 如果能转换,返回转换的字符数;
  • 如果不能转换,则返回 (size_t)-1

4.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>

int main()
{
    // 设置本地化环境
    setlocale(LC_ALL, "");

    char str[] = u8"你好,世界!";
    wchar_t wc;
    mbstate_t state = {0};

    // 将第一个字符转换为宽字符
    size_t len = mbrtowc(&wc, str, MB_CUR_MAX, &state);

    if (len == (size_t)-1)
    {
        printf("Failed to convert multibyte character.\n");
        return 1;
    }

    // 输出宽字符
    wprintf(L"The first wide character is: %lc\n", wc);

    return 0;
}

在上面的示例程序中,

  • 我们首先使用 setlocale() 函数设置本地化环境,以便正确处理多字节字符。
  • 然后我们定义了一个包含中文字符的字符串 str
  • 接着使用 mbrtowc() 函数将第一个字符转换为宽字符,并将其保存到变量 wc 中。
  • 最后,我们使用 wprintf() 函数输出宽字符。

注意: 在调用 mbrtowc() 函数之前,必须将 mbstate_t 结构体的值初始化为 0。在 C99 标准中,可以使用大括号对结构体进行初始化,这会把结构体或数组的每个元素都初始化为默认值(0NULL)。

4.3 运行结果

在这里插入图片描述

5. mbsinit

5.1 函数说明

函数声明函数功能
int mbsinit(const mbstate_t *ps);检查转换状态是否为起始状态

参数:

  • ps : 指向 mbstate_t 结构体的指针,表示要检查的转换状态。

注意: 如果 ps 是空指针,则返回非零值(真),表示默认转换状态已经初始化;否则,如果 ps 描述的转换状态是起始状态,则返回非零值(真);否则,返回 0(假)。

5.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>

int main()
{
    // 设置本地化环境
    setlocale(LC_ALL, "");

    char str[] = u8"你好,世界!";
    mbstate_t state = {0};

    // 检查转换状态是否为起始状态
    if (!mbsinit(&state))
    {
        printf("The conversion state is not initial.\n");
        return 1;
    }

    // 打印转换状态
    printf("The conversion state is %s.\n", (mbsinit(&state) ? "initial" : "not initial"));

    return 0;
}

在上面的示例程序中,

  • 我们首先定义了一个包含中文字符的字符串 str 和一个转换状态结构体 state
  • 然后我们使用 mbsinit() 函数检查转换状态是否为起始状态;
  • 最后在控制台输出 "The conversion state is initial."

5.3 运行结果

在这里插入图片描述

6. mbstowcs

6.1 函数说明

函数声明函数功能
size_t mbstowcs(wchar_t *pwcs, const char *s, size_t n);用于将多字节字符序列转换为宽字符序列。

参数:

  • pwcs : 指向存储结果宽字符序列的缓冲区的指针
  • s : 待转换的多字节字符序列
  • n : 缓冲区的最大长度(以宽字符数计)

返回值:

  • 如果成功地将多字节字符序列转换为宽字符序列,则该函数返回实际写入缓冲区中的宽字符数,不包括空字符 \0
  • 如果遇到了无效的多字节字符或编码,或者宽字符缓冲区不足,导致转换失败,则该函数返回 (size_t)-1

6.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>

int main()
{
    // 设置本地化环境
    setlocale(LC_ALL, "");

    char str[] = u8"你好,世界!";
    wchar_t wcbuf[20];

    // 将多字节字符序列转换为宽字符序列
    size_t ret = mbstowcs(wcbuf, str, sizeof(wcbuf)/sizeof(wchar_t));

    if (ret == (size_t)-1)
    {
        printf("Failed to convert multibyte character sequence.\n");
        return 1;
    }

    // 在控制台输出宽字符序列及其长度
    wprintf(L"The wide character string is: %ls (%zu characters)\n", wcbuf, ret);

    return 0;
}

在上面的示例程序中,我们首先定义了一个包含中文字符的字符串 str 和一个用于存储结果宽字符序列的缓冲区 wcbuf。然后我们使用 mbstowcs() 函数将多字节字符序列转换为宽字符序列,并在控制台输出相应的信息。

注意: 在计算缓冲区大小时,必须将其指定为宽字符数(即 sizeof(wcbuf)/sizeof(wchar_t)),而不是字节数或字符数。这是因为在 Windows 等一些操作系统中,wchar_t 类型并不总是占用固定的字节数,而可能会根据编译器和平台而变化。

6.3 运行结果

在这里插入图片描述

7. mbstowcs

7.1 函数说明

函数声明函数功能
size_t mbsrtowcs(wchar_t *dst, const char **src, size_t len, mbstate_t *ps);用于将多字节字符序列转换为宽字符序列,并在转换过程中自动更新 mbstate_t 转换状态结构体。

参数:

  • dst: 指向存储结果宽字符序列的缓冲区的指针
  • src : 指向待转换的多字节字符序列的指针的指针
  • len : 缓冲区的最大长度(以宽字符数计)
  • ps : 指向包含转换状态信息的结构体 mbstate_t 的指针

返回值:

  • 如果成功地将多字节字符序列转换为宽字符序列,则该函数返回实际写入缓冲区中的宽字符数,不包括空字符 \0
  • 如果遇到了无效的多字节字符或编码,或者宽字符缓冲区不足,导致转换失败,则该函数返回 (size_t)-1

注意: mbsrtowcs() 函数会自动更新转换状态结构体 mbstate_t,以记录上一次调用的状态并在下一次调用时继续使用。这使得 mbsrtowcs() 函数适用于处理长的、包含部分多字节字符的字符串。它会自动识别和处理多字节字符序列中的部分字符,并等待更多的字节,直到可以完成转换为止。

7.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>

int main()
{
    // 设置本地化环境
    setlocale(LC_ALL, "");

    char str[] = u8"你好,世界!";
    wchar_t wcbuf[20];
    mbstate_t state = {0};

    // 将多字节字符序列转换为宽字符序列
    size_t ret = mbsrtowcs(wcbuf, (const char**)&str, sizeof(wcbuf)/sizeof(wchar_t), &state);
    if (ret == (size_t)-1)
    {
        printf("Failed to convert multibyte character sequence.\n");
        return 1;
    }

    // 在控制台输出宽字符序列及其长度
    wprintf(L"The wide character string is: %ls (%zu characters)\n", wcbuf, ret);

    return 0;
}

8. mbtowc

8.1 函数说明

函数声明函数功能
int mbtowc(wchar_t *restrict pwc, const char *restrict s, size_t n);用于将一个多字节字符 (Multibyte Character) 转换成一个宽字符 (Wide Character)。

参数:

  • pwc : 指向存储宽字符的指针。
  • s : 指向要转换的多字节字符的指针。
  • n : 要转换的最大字节数。

返回值:

  • 如果转换成功,则返回转换后的宽字符数;
  • 如果遇到无效的多字节字符,则返回 -1
  • 如果传递了空指针,则返回 0

8.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>

int main(void)
{
    setlocale(LC_ALL, "");

    char mbstr[] = "Hello, world!";
    wchar_t wc;
    int len = mbtowc(&wc, mbstr, sizeof(mbstr));
    if (len > 0) {
        wprintf(L"%lc\n", wc);
    } else if (len == 0) {
        wprintf(L"Empty string.\n");
    } else if (len == -1) {
        wprintf(L"Invalid multibyte character.\n");
    }

    return EXIT_SUCCESS;
}

8.3 运行结果

在这里插入图片描述

9. memccpy

9.1 函数说明

函数声明函数功能
void *memccpy(void *restrict dst, const void *restrict src, int c, size_t n);用于将内存块的内容复制到另一个内存块中,并在指定字符出现时停止复制。

参数:

  • dst : 要复制到的目标内存块的指针
  • src : 要从中复制数据的源内存块的指针
  • c : 指定的字符值
  • n : 要复制的字节数

返回值:

  • 如果源内存块的前 n 个字节中包含字符 c,则返回指向字符 c 后面一个字节的指针;
  • 否则返回 NULL

9.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char src[] = "Hello, world!";
    char dst[20];
    memset(dst, 0, sizeof(dst));

    char *p = (char*) memccpy(dst, src, 'o', sizeof(src));
    if (p) {
        printf("'%c' found at index %ld\n", *(p - 1), p - dst - 1);
    } else {
        printf("'%c' not found\n", 'o');
    }

    printf("%s\n", dst);

    return 0;
}

9.3 运行结果

在这里插入图片描述

10. memchr

10.1 函数说明

函数声明函数功能
void *memchr(const void *s, int c, size_t n);用于在某一内存块中查找指定字符的位置。

参数:

  • s : 要进行查找的内存块的起始地址
  • c : 要查找的指定字符,以整数形式表示
  • n : 要查找的字节数,即在前 n 个字节中查找指定字符

10.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char str[] = "Hello, world!";
    char ch = 'w';
    char *p;

    // 在字符串中查找指定字符
    p = (char*) memchr(str, ch, strlen(str));
    if (p) {
        printf("'%c' found at index %ld\n", ch, p - str);
    } else {
        printf("'%c' not found\n", ch);
    }

    return EXIT_SUCCESS;
}

在上述程序中,

  • 我们首先定义了一个字符串 str 和要查找的指定字符 ch
  • 然后使用 memchr() 函数查找字符串 str 中是否包含指定字符 ch
  • 最后如果找到了该字符,则输出它的索引位置;否则,输出未找到的提示信息。

10.3 运行结果

在这里插入图片描述

11. memcpy

11.1 函数说明

函数声明函数功能
void *memcpy(void *dest, const void *src, size_t n);用于将源内存块中的 n 个字节复制到目标内存块中。

参数:

  • dest : 目标内存块的起始地址
  • src : 源内存块的起始地址
  • n : 要复制的字节数

11.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char src[] = "Hello, world!";
    char dst[20];
    memset(dst, 0, sizeof(dst));

    // 将源字符串复制到目标字符串中
    memcpy(dst, src, strlen(src));

    printf("%s\n", dst);

    return 1;
}

注意: 在使用 memcpy() 函数进行内存复制时,目标内存块必须足够大,以容纳源内存块中的全部内容。否则,复制过程可能会导致访问非法内存空间,从而导致代码异常或崩溃。因此,在进行内存复制时,应该尽量避免超出目标内存块大小的范围。

11.3 运行结果

在这里插入图片描述

12. memcmp

12.1 函数说明

函数声明函数功能
int memcmp(const void *s1, const void *s2, size_t n);用于比较两个内存块的内容是否相同。

参数:

  • s1 : 要进行比较的第一个内存块的起始地址
  • s2 : 要进行比较的第二个内存块的起始地址
  • n : 要比较的字节数。

注意: memcmp() 函数会逐一比较两个内存块中对应位置上的字节大小,直到找到差异或者比较完全部字节。

  • 如果两个内存块完全相同,则返回值为 0
  • 如果两个内存块不同,则返回值是两个内存块中第一个不同字节处的差值(s1 中该字节的值减去 s2 中该字节的值)。

12.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char str1[] = "Hello, world!";
    char str2[] = "Hello, everyone!";

    // 比较两个字符串
    int result = memcmp(str1, str2, strlen(str1));
    printf("result = %d\n", result);
    if (result == 0) {
        printf("Strings are equal\n");
    } else if (result < 0) {
        printf("String '%s' is smaller than string '%s'\n", str1, str2);
    } else {
        printf("String '%s' is larger than string '%s'\n", str1, str2);
    }

    return 1;
}

注意: 在比较两个内存块时,应该确保被比较的内存块中包含足够的字节,并且待比较的字节数不超过内存块大小,否则函数可能会出现异常行为。另外,由于返回值是有符号整数类型,因此在比较时应该将其强制转换为无符号整数类型,以避免出现不必要的错误。

12.3 运行结果

在这里插入图片描述

13. memmove

13.1 函数说明

函数声明函数功能
void *memmove(void *dest, const void *src, size_t n);用于将源内存块中的 n 个字节复制到目标内存块中。与 memcpy() 函数不同的是,memmove() 函数在复制过程中会处理内存块重叠的情况。

参数:

  • dest : 目标内存块的起始地址
  • src : 源内存块的起始地址
  • n : 要复制的字节数。

注意: memmove() 函数会将源内存块中的前 n 个字节复制到目标内存块中,并返回指向目标内存块起始地址的指针。

13.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char str[] = "Hello, world!";
    char tmp[20];
    memset(tmp, 0, sizeof(tmp));

    // 将源字符串复制到目标字符串中(处理重叠的情况)
    memmove(tmp, str + 6, strlen(str) - 6);

    printf("%s\n", tmp);

    return 0;
}

注意: 在使用 memmove() 函数进行内存复制时,目标内存块必须足够大,以容纳源内存块中的全部内容。否则,复制过程可能会导致访问非法内存空间,从而导致代码异常或崩溃。此外,由于 memmove() 函数的处理开销较大,因此在不涉及内存块重叠时,应该尽量使用 memcpy() 函数以提高效率。

13.3 运行结果

在这里插入图片描述

14. memset,memset_s

14.1 函数说明

函数声明函数功能
void *memset(void *s, int c, size_t n);用于将一个内存块中的所有字节都设置为指定的值。
errno_t memset_s(void *s, rsize_t smax, int c, rsize_t n);C11 标准新增了一个名为 memset_s() 的安全版本函数。与 memset() 函数不同的是,memset_s() 函数会在设置内存块值时检查目标内存块大小,并防止缓冲区溢出、重叠等安全问题。

memset 参数:

  • s : 要进行设置的内存块的起始地址
  • c : 要设置的值,以整数形式表示
  • n : 要设置的字节数

memset_s 参数:

  • s : 要进行设置的内存块的起始地址
  • smax : 目标内存块的大小
  • c : 要设置的值,以整数形式表示
  • n : 要设置的字节数

14.2 演示示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char str[21] = {'\0'};
    memset(str, 'A', sizeof(str) - 1);
    printf("%s\n", str);
    return 0;
}

14.3 运行结果

在这里插入图片描述

参考

  1. [API Reference Document]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring】三大依赖注入(@Autowired,Setter,构造方法)

目录 一、属性注入&#xff08;Autowired&#xff09; 1.1 优点分析 1.2 缺点分析 1.2.1 无法实现final修饰的变量注入。 1.2.2 兼容性不好 1.2.3 &#xff08;可能违背&#xff09;设计原则问题 1.2.4 代码举例&#xff1a; 1.2.5 出现循环依赖该怎么办&#xff1f; 二…

自然语言模型的哲学小谈

近期&#xff0c;以chatGPT为代表的大语言模型表现非常惊艳。“In Context Learning”、“Instruct”1&#xff0c;以及推理能力&#xff0c;很难不让我们期待未来人工智能的发展&#xff0c;同时冷静思考一下为什么自然语言模型能够取得巨大进步。 文章目录 1 放空大脑从0开始…

Ngiinx反向代理和负载均衡

系列文章目录 目录 系列文章目录一、Nginx的反向代理1.代理含义2.反向代理配置模块 二、1.动静分离2.负载均衡实验 总结 一、Nginx的反向代理 1.代理含义 正向代理 正向代理&#xff0c;指的是通过代理服务器 代理浏览器/客户端去重定向请求访问到目标服务器 的一种代理服务…

ARP协议详解

ARP协议详解 文章目录 ARP协议详解ARP协议介绍ARP抓包ARP包解析 ARP协议介绍 ARP&#xff08;Address Resolution Protocol&#xff09;是一种用于将网络层地址&#xff08;如IP地址&#xff09;转换为数据链路层地址&#xff08;如MAC地址&#xff09;的协议&#xff0c;当一…

软件测试概念篇(下)|开发模型与测试模型

作者&#xff1a;爱塔居 专栏&#xff1a;软件测试 作者简介&#xff1a;大三学生&#xff0c;希望同大家一起进步&#xff01; 文章简介&#xff1a;主要介绍软件生命周期、瀑布模型和螺旋模型两个开发模型&#xff0c;V模型和W模型两个测试模型 文章目录 目录 文章目录 一、软…

【Go】五、网络编程

文章目录 网络编程1、互联网协议介绍2、Socket编程2.1、socket图解2.2、TCP编程2.3、UDP编程2.4、粘包&#xff08;❌没有详细看代码&#xff0c;但是大概知道怎么实现&#xff09; 3、Http编程4、WebSocket编程 网络编程 1、互联网协议介绍 2、Socket编程 2.1、socket图解 1…

这家工作室为网飞、亚马逊、迪士尼都制作过特效

过去的十年里&#xff0c;CGEV工作室通过为电影、电视剧以及Netflix、Amazon、Disney等平台制作大量内容&#xff0c;建立了坚不可摧的声誉。我们采访了CGEV团队&#xff0c;了解他们如何在每一个环节都依赖于ftrack Studio。 CGEV全称Compagnie Gnrale des Effets Visuels&…

C++缺省参数

目录 什么是缺省参数缺省参数分类全缺省参数半缺省参数 缺省参数函数的声明缺省参数的使用 什么是缺省参数 缺省参数是声明或定义函数时,为函数的参数指定一个缺省值。 在调用该函数时&#xff0c;如果没有指定实参&#xff0c;那么形参就会采用缺省值&#xff0c;如果指定了实…

【C语言】基础语法5:数组和指针

上一篇&#xff1a;函数和递归 下一篇&#xff1a;字符串和字符处理 ❤️‍&#x1f525;前情提要❤️‍&#x1f525;   欢迎来到C语言基本语法教程   在本专栏结束后会将所有内容整理成思维导图&#xff08;结束换链接&#xff09;并免费提供给大家学习&#xff0c;希望…

C#串口通信从入门到精通(4)——串口调试助手的使用

前言: 关于本文中使用到的串口助手工具,订阅专栏后,加入vip群,即可在群文件免费下载 1、认识串口助手 串口助手主要的功能有以下六个模块,功能介绍分别如下: 1.1 打开、关闭串口、清除接收区数据按钮区 这些按钮用于打开串口、关闭串口、清除接收数据区的数据 1.2 …

IIC协议——同步半双工串行通信方式

文章目录 前言一、简要介绍1、优点2、缺点 二、信号线和连接方式1、信号线2、连接方式2.1 单主设备&#xff0c;单从设备2.2 单主设备&#xff0c;多从设备2.3 多主设备&#xff0c;多从设备 三、数据传输格式1、数据传输过程 二、SPI配置1、传输模式2、地址位宽3、仲裁机制3.1…

【Linux】Linux基本指令(1)

一.前言 从这篇文章开始&#xff0c;博主就开启了Linux学习之路了&#xff0c;本篇文章也是博主的第一篇Linux的文章&#xff0c;今后也会持续不断更新的。 二.理解文件 1.文件 文件文件数据文件属性&#xff08;所以一个建好的文件就算没有数据&#xff0c;也占用存储空间&am…

[RoarCTF 2019]Easy Calc、攻防世界 ics07、[极客大挑战 2019]EasySQL

[RoarCTF 2019]Easy Calc 进入题目是一个计算器的功能 检查网页源码发现这样一个重要信息 这题有WAF计算功能是通过calc.php这里面的代码执行的&#xff0c;我们去访问一下得到源码 <?php error_reporting(0); if(!isset($_GET[num])){show_source(__FILE__); }else{$str…

传统机器学习(二)逻辑回归算法(二)

传统机器学习(二)逻辑回归算法(二) 之前在传统机器学习(二)逻辑回归算法(一)中介绍了逻辑回归的原理、公式推导、手动python实现及sklearn工具包的使用详解等内容。继续对逻辑回归的使用细节进行介绍。 一、如何得到逻辑回归模型系数 1.1、一个简单的逻辑回归例子 已采集15…

广州蓝景分享—6 个ES13 中非常实用的新 JavaScript 特性

首先作为前端最重要的编程语言JavaScript&#xff0c;每年都在不断发展&#xff0c;让该语言都会通过新功能变得更强大。今天由小蓝跟大家分享6 个ES13 中非常实用的新 JavaScript 特性。 接下来让我们开始&#xff1a; 1.at 当我们想要获取数组的第 N 个元素时&#xff0c;…

Redis底层设计与源码分析---学习笔记

一.Redis为什么快 高速的存储介质 机械硬盘—>固态硬盘—>内存&#xff0c;随机访问的延迟逐渐变小 优良的底层数据结构设计 底层设计用到了hashtable&#xff0c;时间复杂度低 高效的网络IO模型 epoll等&#xff0c;不同平台有不同的实现   高效的线程模型 二.Re…

【论文阅读笔记|ACL2022】Legal Judgment Prediction via Event Extraction with Constraints

论文题目&#xff1a;Legal Judgment Prediction via Event Extraction with Constraints 论文来源&#xff1a;ACL2022 论文链接&#xff1a;https://aclanthology.org/2022.acl-long.48.pdf 代码链接&#xff1a;GitHub - WAPAY/EPM 0 摘要 近年来&#xff0c;虽然法律判…

动态内存管理--->(经典入手版详解)

友友们有时候在开辟内存的时候&#xff0c;所需要的空间大小不太好确定&#xff0c;只有在程序运行的时候才能知道&#xff0c;这时候我们就要尝试一下动态内存开辟空间了&#xff0c;下面来和阿博一起了解并掌握它吧&#x1f917;&#x1f917;&#x1f917; 文章目录 1.为什么…

系统的部署

把报错的三个给删了&#xff0c;系统可以运行了我猜测它对应的是商品分类页面 我觉得它分页器有问题所以研究了下userdto和mtuser的区别 Failed to parse configuration class [com.fuint.fuintApplication]; nested exception is java.lang.IllegalArgumentException: Could…

Mycat数据库中间件 mycat2 路由转发

1.非分片字段查询 Mycat中的路由结果是通过分片字段和分片方法来确定的。例如下图中的一个Mycat分库方案&#xff1a; 根据 tt_waybill 表的 id 字段来进行分片 分片方法为 id 值取 3 的模&#xff0c;根据模值确定在DB1&#xff0c;DB2&#xff0c;DB3中的某个分片 非分片字段…