C语言基础 -15 输入输出 - 字符/字符串输入输出函数
程序员文章站
2022-04-30 18:22:05
...
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比较危险
推荐阅读
-
c语言字符串替换函数(教你c语言实现字符串调换)
-
c语言字符串替换函数(教你c语言实现字符串调换)
-
C语言的字符串处理函数strlen()
-
C语言的字符串输出fputs()函数
-
C语言笔记 08_函数指针&回调函数&字符串&结构体&位域
-
C++中的字符串输入输出,转自:https://www.cnblogs.com/zzw1024/p/10502011.html
-
Python 语言基础(数字、获取用户输入、函数、注释、字符串)
-
C语言——常用标准输入输出函数 scanf(), printf(), gets(), puts(), getchar(), putchar(); 字符串拷贝函数 strcpy(), strncpy(), strchr(), strstr()函数用法特点
-
C语言使用strcmp()函数比较两个字符串的实现
-
C语言:字符串替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”。