fgets和fputs

来源:互联网 发布:淘宝个人卖家工商登记 编辑:程序博客网 时间:2024/05/23 21:20

  1)fgets()和fputs()函数的使用
       a、fgets()该函数是一个文件操作相关的函数。
    暂时使用这个函数可以从键盘上接收一个字符串,保存到数组中。
    原来学过的接收字符串的方法:
       一、
char str[50];
scanf("%s"str);//缺点是:不能接受空格
二、
gets(str);//优点:可以接受空格。缺点:会有一个警告,不安全
         //比如数组长度为50,如果我们输入的长度正好是50,此时把50个字符全部存到数组中,这是就会存在问题,因为没有空间存放字符串结束符。
         fgets()是一个安全的字符串接收函数。  
   char ch[5];//如果使用fgets此时数组中最多可存放4个可见字符。
  //会自动把数组的最后一个元素存放为'\0'。
b、fgets()使用格式:
    fgets(数组名,数组长度,stdin);//stdin表示标准的输入
代码:
char ch[10];
//fgets从输入缓冲区读取一个字符串,保存到字符数组中
fgets(ch,sizeof(ch),stdin);
printf("%s\n",ch);
//当输入的字符串长度大于数组的长度,此时fgets会自动把数组的最后一个元素变成\0
//当输入的字符串的长度小于数组长度的时候,fgets()还会接收回车键\n
if()(ch[strlen(ch)-1])=='\n'){
    ch[strlen(ch)-1]='\0';//把\n换成\0
    }
c、fputs()使用格式:
fputs(数组名,stdout);
fputs()是不会自动换行的。
fputs()也不能进行格式化的输出。
 
  2)fgets()和fputs()的优缺点
        优点:fgets()、fputs()帮我们自动截取输入的字符串,使得我们对字符串的存取是安全的。
缺点:会有警告,不安全。
对比:scanf()接收一个大与字符数组长度的字符串,此时字符数组长度之外的字符是不安全的(越界访问的)

  3)const关键字介绍及作用
a、什么是const?
const是一个类型修饰符;;
使用const修饰符变量则可以让变量的值不能改变。
常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。
        b、const有什么主要的作用?
①可以定义const常量,具有不可变性。
②便于进行检查,使编译器对处理内容有更多了解,消除了一些隐患。
③可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已,一变都变。
④可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。
   例如:void f(const int i){......}
如果在函数体内修改了i的值,编译器就会报错。
⑤可以节省空间,避免不必要的内存分配。例如:
#define PI 3.14159//常量宏
const double Pi=3.14159;//此时并未将Pi放入ROM中...
double i=Pi; //此时为Pi分配内存,以后不再分配
double I=PI; //编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再进行宏替换,又一次分配内存
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。
⑥提高了效率。编译器通常不为普通const常量分配存储空间,而是将他们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
        c、如何使用const?
①修饰一般常量  一般常量是指简单类型的常量。这种常量在定义时,修饰符const可以用在类型说明符前,也可以用在类型说明符后。
   例如:int const x=2;  或者    const int x=2;
!!通过强制类型转换,将地址赋给变量,再作修改即可改变const常量值。
   int *p=&a;
*p=100;   //强制修改常量
printf("%d\n",*p);//此时值发生改变

②修饰指针
一、const修饰的指针变量的指向可变,指向的变量值不可变。
int a=10;
int b=20;
//定义一个指针变量,p指向a
int *p=&a;
*p=1000;
printf("%d\n",a);//输出为1000

int a=10;
int b=20;
//定义一个指针变量,p指向a
const int *p=&a;//此处const的作用是指向变量p的指向可以改变,但是指向的变量的值是不能改变的
  p=&b;//可以改变指向
*p=1000;//编译报错
printf("%d\n",a);//输出为1000

二、const修饰的指针变量,指针变量指向的值可以改变,指向不能变。
int a=10;
int b=20;
int * const p2=&a;
*p=2000; //此时值可以改变,不会有错
p=&b; //此时编译报错,即p的指向不可以变

三、const修饰的指针变量的指向和值都不能改变
int a=10;
int b=20;
const int * const p=&a;
p=&b; //编译报错,指向不可变
*p=1000; //编译报错,值不可变
记忆的技巧:
看 const 和 * 的位置:
如果const在*的左侧,此时表示指针变量指向的变量的值不能变,但是指向可以变。
如果const在*的右侧,此时表示指针指向的变量的值可以改变,但是指向不可以改变。
如果const出现在*的两测,表示指针变量的指向和值都不能改变。
0 0
原创粉丝点击