gets和scanf函数初篇

来源:互联网 发布:爬虫软件有哪些 编辑:程序博客网 时间:2024/04/30 23:35

: 这一定是我在学习C语言中遇到的第一个大问题,时而感觉搞清楚了,时而又被绕在了里面,那就是gets,getchar还有scanf的区别。
因为一开始我们会经常面临这样这样的问题,人家让我们通过标准输入来输入一些字符或者数字等等,然后再在屏幕上显示出来。我们老师当时就喜欢出这样的问题给我们,让我当时很头大。明明是感觉很简单的问题,但是真正在编写代码的时候却总是出现这样那样的问题。
接下来我们看几个简单的例子:
em1:
通过键盘输入“Hello World”,并在屏幕上显示。
用scanf函数输入:

  #include<stdio.h>  #include<windows.h>  int main()   {    char arr[10];    printf("input the words\n");    scanf_s("%s", arr,10);    printf(arr);    system("pause");    return 0;}
 当我输入"Hello World"的时候,会发现屏幕只给我输出了"Hello",得不到我想要的结果。 当我使用gets函数的时候
#include<stdio.h>#include<windows.h>int main(){    char arr[20];    printf("input the words\n");    gets_s(arr,20);    printf(arr);    system("pause");    return 0;}
 就能得到我想要的结果"Hello World".当然这只是一个很简单的例子,相信很多人都知道其中的缘由。

1.scanf()
所在头文件:stdio.h
语法:scanf(“格式控制字符串”,变量地址列表);
接受字符串时:scanf(“%s”,字符数组名或指针);
2.gets()
所在头文件:stdio.h
语法:gets(字符数组名或指针);
两者在接受字符串时:
1.不同点:
scanf不能接受空格、制表符Tab、回车等;
而gets能够接受空格、制表符Tab和回车等;
2.相同点:
字符串接受结束后自动加’\0’。

: 还有相当重要的一点,就是我在设定arr【】的大小的时候,需要事先确定好你需要多大的空间来存放你所输入的字符串,比如刚才我如果输入一行n,程序就会出现输出乱码,下图是scanf函数时,如果用的是gets,会弹出报错窗口,这就是你输入的东西超过你事先定好的空间,也就是越界。
我这里用的是VS2013,可以看到我在程序中调用的是scanf_s函数和gets_s函数,这是人们约定了这么一个相比scanf和gets能安全点的函数,所以我在使用函数的时候后面的参数需要加上事先定好的空间长度。如果在早期的VC6.0版本的话,scanf函数时可以被越界的,这就造成了很多的bug。
这dsc里写图片描述

: 虽然这些东西都很简单,但我们必须要搞清楚,避免稍不注意就会在写代码的时候出现错误。
可能在一些人看来,这下东西都是基本常识,但正是这样,我才希望大家能在以后的写简单代码的时候不会犯这样的错误,虽然这些函数现在用到的地方很少。

0 0
原创粉丝点击