双指针算法关于使用gets和fgets的笔记
作者:
你算什么bug
,
2022-03-04 08:43:48
,
所有人可见
,
阅读 188
#include <iostream>
#include <cstring>
using namespace std;
int main(){
char str[1000];
/*
gets()不会判断上限,就是不会检查buffer缓冲区的大小。
假如调用函数时提供了一个指向堆栈的指针,gets读入的字符超过了缓冲区的大小造成了溢出,
gets函数继续读入的字符就会覆盖原本堆栈中的内容,破坏一个或多个其他变量的值。
C11标准已完全删除gets()
*/
// gets(str);
/*
fgets()能解决上述问题,
但不能用fgets()来读取二进制文件,它会把二进制文件当成普通文本文件处理
fgets()只会读取n-1个字符,遇到换行符返回,并在最后添加字符串结束标志。
fgets()还会将换行符读
入*/
fgets(str, 1010, stdin); //输入一行字符串
int n = strlen(str);
for(int i = 0; str[i]; i++){
int j = i;
while(j < n && str[j] != ' ') ++j;
//输出获取到的输入的字符,遇到空格就换行
for(int k = i; k < j; k++) cout << str[k];
cout << endl;
i = j;
}
return 0;
}