• C语言-字符串操作函数


    gets(char buffer[]) 从标准输入读取一行, 并去掉换行符, 在字符串末尾增加 '' 字符, 写入到缓冲区

      成功则返回 buffer 的地址, 出错或者遇到文件结尾则返回空指针, 使用 stdio 的  NULL 表示

    fgets(char buffer[], int num, FILE * f) 从指定文件 f 中读取 num - 1 个字符, 不会去掉换行符, 并在末尾添加 '' 字符, 写入到 buffer

    scanf(const char * format [, argument]) 处理字符串时, 更基于获取单词, 而不是获取字符串, 在字符串末尾增加 '' 字符, 如果指定了宽度, 则字符串长度为 N + 1, 停止读取字符串结束原因:

      1.遇到了第一个非空白字符

      2.如果指定了宽度, 读取指定宽度后停止读取

      返回 EOF 或者成功读取的变量

    fscanf(FILE *stream, const char *format [,    argument ])

      同 scanf 返回

    字符串打印都是在遇到 '' 时停止

    puts() 会自动在字符串末尾加 ' ' 换行符, 与 gets() 互补

    fputs() 不自动为输出增加 ' ' 换行符, 与 fgets() 互补

    printf()

    fprintf()

    strlen(const char *str) 获取字符长度, 字符串必须以 '' 结束, 不把 '' 计算在内

    strcpy, ctrcat, sprintf, gets 容易造成缓冲区溢出, 罪魁祸首是不检查变量长度

    gets(char *buffer) 从标准输入读取用户输入的一行文本, 它在遇到 EOF 字符或换行字符之前, 不会停止读入文本, 也就是 gets() 根本不执行边界检查, 因此, 使用 gets() 总是有可能使任何缓冲区溢出, 永远不要使用此函数, 不安全, 没有限制输入的字符个数, 如果超出 buffer 会导致程序失败, 可以使用 fgets() 函数做替代

      不要使用如下代码:

    char buf[1024];
    gets(buf);

      使用以下代码代替:

    char buf[BUFSIZE];
    fgets(buf, BUFSIZE, stdin);

    strcpy() 将源字符串复制到缓冲区, 没有指定要复制字符的具体数目, 复制字符的数目直接取决于源字符串中的数目, 如果源字符串碰巧来自用户输入, 且没有专门限制其大小, 则有可能会陷入大的麻烦中

      1.如果知道目的地缓冲区的大小, 则可以添加明确的检查

    if (strlen(src) >= dst_size) {
        /* Do something appropriate, such as throw an error. */
    } else {
        strcpy(dst, src);
    }

      2.使用 strncpy() 函数

    strcpy, strcat, sprintf, scanf, sscanf, fscanf, vfscanf, vsprintf, vscanf, vsscanf, streadd, strecpy, strtrns,

  • 相关阅读:
    HGOI 20200724
    HGOI 20200722
    [USACO Open08]牛的邻居Cow Neighborhoods解题报告
    [USACO Jan07]考试Schul解题报告
    [CF 249D]Donkey and Start解题报告
    [CF 321D]Ciel and Flipboard解题报告
    [CF 294D]Shaass and Painter Robot解题报告
    [CF 297E]Mystic Carvings解题报告
    [CF 306E]Levko and Game题解翻译
    [CF 316F3]Suns and Rays解题报告
  • 原文地址:https://www.cnblogs.com/JohnABC/p/4569267.html
Copyright © 2020-2023  润新知