欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言基础 -15 输入输出 - 字符/字符串输入输出函数

程序员文章站 2022-04-30 18:22:05
...

C语言基础 -15 输入输出 - 字符/字符串输入输出函数 

aaa@qq.com:~/c/CH02$ make getchar_putchar
cc     getchar_putchar.c   -o getchar_putchar


aaa@qq.com:~/c/CH02$ ./getchar_putchar 
a        //输入a,则直接putchar(ch)输出字符a,putchar()没有换行的功能
aaa@qq.com:~/c/CH02$ ./getchar_putchar 
m        //输入m,则直接putchar(ch)输出字符m,putchar()没有换行的功能
aaa@qq.com:~/c/CH02$ cat getchar_putchar.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
        int ch;
        ch = getchar();
        putchar(ch);
        exit(0);
}

gets不会对当前定义的暂存缓存空间做检查的。

aaa@qq.com:~/c/CH02$ cat gets_puts.c
#include <stdio.h>
#include <stdlib.h>
#define STRSIZE 32

int main()
{
        char str[STRSIZE];
        gets(str);
        puts(str);
        exit(0);
}


aaa@qq.com:~/c/CH02$ make gets_puts
cc     gets_puts.c   -o gets_puts


aaa@qq.com:~/c/CH02$ ./gets_puts 
hello
hello

aaa@qq.com:~/c/CH02$ ./gets_puts 
helloworld
helloworld

aaa@qq.com:~/c/CH02$ ./gets_puts 
helloworldadddddddddddddddddddddddddddddddddasaaaaaaaaaaaaaaaaaaffffffffffffffffeeeeeeeeeeeeee
helloworldadddddddddddddddddddddddddddddddddasaaaaaaaaaaaaaaaaaaffffffffffffffffeeeeeeeeeeeeee

aaa@qq.com:~/c/CH02$ ./gets_puts 
ooooooooooooooooooooooeeeeeeeeeeeeeeeeeeeeeeeeeewwwwwwwwwwwwwwwwwwwwwwwwwwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ooooooooooooooooooooooeeeeeeeeeeeeeeeeeeeeeeeeeewwwwwwwwwwwwwwwwwwwwwwwwwwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

如上例,问题出在即便输入明显超过定义的数组大小32(其中32个字符里面还包括一个尾数0,实际可以输入的最大字符长度是31位),结果仍然可以正常输出,没有缓存大小的检查。因此gets比较危险

 

相关标签: Linux C编程