【ACM】那些年的IO

  1. scanf(“%s”, str)
    终止条件:空格、制表符、换行
    ‘\n’ 留在缓冲区,可能会影响后续的getchar、gets等函数
    scanf函数是不可能读到空字符串的,因为它不会读取空白字符,因此会不停的等待输入直到有非空白字符为止。

  2. gets(str)
    终止条件:换行
    ‘\n’ 不留在缓冲区,被函数吞掉,但也不保留在 str 中,str以’\0’结尾
    需要注意的是,此函数会读取空行。

  3. fgets(str, sizeof(str), stdin)
    终止条件:换行
    ‘\n’ 不留在缓冲区,会保存在 str 中,str以’\0’结尾(因此长度比实际大1)
    fgets本来是文件的输入函数,但是也可以用于标准输入,它比gets函数的优势就是它能限制字符串输入的长度,避免了缓冲区溢出,有许多网络攻击都属于缓冲区溢出攻击。换而言之就是说fgets函数比gets函数安全。
    fgets与gets在输入字符串中除了限制输入字符串的长度以外的主要区别就在于fgets会将换行符读取到字符串里面而不是像gets函数那样将换行符销毁。

参考资料
  1. 字符串输入函数,scanf,gets,fgets的用法和区别
  2. cin、cin.get()、getline()(讲解的很详细)

猜你喜欢

转载自blog.csdn.net/qq_34898866/article/details/79546918