1.fgets()函数的使用 原型: fgets(数组名, 数组长度 stdin); 该函数是一个文件操作相关的函数,暂时使用这个函数可以 从键盘上接受一个字符串并保存到数组中去。
原来接受字符串保存到数组中的方法 - #include <stdio.h>
- #include <string.h>
- int main(int argc, const char * argv[])
- {
-
- char str[10];
- //1.scanf
- //scanf("%s",str);//缺点,不能接受空格
- //printf("%s",str);
- //2.gets
- //gets(str);//优点:可以接收空格,但是会有一个不安全的警告,如果字符长度位100,但是输入的字符超过100个的话,此时存在隐患,没有空间再存放结束符
- printf("%s",str);
-
- //3.fgets 是一个安全的字符串接收的函数
- //fgets从输入缓冲区读取一个字符串保存到字符数组中
- //当输入的字符串的长度大于数组的长度,此时fgets会自动把数组的最后一个元素变成‘\0’
- //当输入的字符串小于字符数组长度时,fgets函数还会接收回车符
- fgets(str, sizeof(str), stdin);//
- int len = strlen(str);
- if (str[len - 1] == '\n') {
- str[len - 1]='\0';//去除掉多余的\n
- }
- printf("%s",str);
- return 0;
- }
复制代码
打印结果 I am amos!I am a boy I am amos 分析结果:
看上面的打印结果,只打印了9个字符,最后一个字符自动被设置位\0 2.fputs()函数的使用 - //printf("%s",str);
- //fputs也是一个文件操作相关的函数
- //fputs(数组名, stdout);//表示把一个字符串显示到控制台上
- fputs(str, stdout);//fputs是不会自动换行的,也不能格式化输出
复制代码
3.fgets(),fputs()函数的优缺点 优点:是安全的,scanf和gets都有可能导致越界访问,而fgets可以自动在字符数组结尾设置\0结束符。 缺点:不能格式化输入输出
|