0037 fgets const

/*
   
   1、fgets()
 
        该函数一个文件操作相关的函数
 
        暂时使用这个函数可以从键盘商接收一个字符串,保存到数组中
 
   原来接收字符串保存到数组中的方法
   
      char str[50];
 
     1) scanf("%s",str);  //缺点:不能接收空格
 
     2) gets(str);        //优点:可以接收空格
                           //会有一个警告,不安全的
                           //不安全:比如数组长度是50,如果我们输入的
                           //的长度正好是50个,此时把50个字符全部存到
                           //数组中,存在问题 因为没有空间存放字符串结束符
  
    fgets()是一个安全的字符串接收的函数
 
      char ch[5];  //如果使用fgets此时数组中最多存放4个可见字符
                   //会自动的把数组的最后一个元素存放
 
    fgets()使用格式:
 
          fgets(数组名,数组长度,stdin);
 
 
    fputs();也是一个文件操作相关的函数
    格式:
 
       fputs(数组名,stdout);
 
 
 
 */


#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
    
    char ch[5];
    //fgets从输入缓冲区读取一个字符串保存到字符数组中
    //当输入的字符串的长度大于数组的长度,此时fgets会自动的
    //把数组的最后一个元素变成
    //当输入的字符串的长度小于数组长度的时候,fgets还会接收回车
    fgets(ch, sizeof(ch), stdin);
    //去掉多余的

    if(ch[strlen(ch)-1]=='
') ch[strlen(ch)-1]='';

    //
  它的ascii码值10
    for (int i=0; i<5; i++) {
        printf("%d	",ch[i]);
    }
    
    //fputs是不会自动换行
    //fputs也不能进行格式化的输出
    //puts 可以自动换行
    fputs(ch, stdout);
    //printf("--->%s
",ch);

    
    
    return 0;
}

/*
    const使用的地方
 
 
    1)修饰变量
 
       int a = 10;
 
       printf("%d
",a);  //10
 
       a = 200;
 
       printf("%d
",a);  //200
 
    2)修饰指针变量
 
    3)修饰数组
 
 
 
 
 */


#include <stdio.h>
/**
 *  const修饰变量,使得变量变成常量
 */
void test1(){

    //使用const修饰变量a
    const int a = 10;
    printf("%d
",a);  //10
    
    //a = 200;//read-only
    printf("%d
",a);  //200

}
/**
 *  用指针强制修改const常量
 */
void test2(){


    //使用const修饰变量a
    const int a = 10;
    printf("%d
",a);  //10
    
    
    int *p = &a;  //
    *p = 100;  //强制修饰常量
    
    printf("%d,%d
",a,*p);  //

}

int main(int argc, const char * argv[]) {
    
    int a = 10;
    int b = 20;
    
    //定义个指针变量,p指向a
    //此处的const的作用是指针变量p的指向可以改变,但是指向的变量的值
    //不能改变的
    
    //1、const修饰的指针变量指向可变,指向的变量的值不可变
    const int *p = &a; //给p初始化
               p = &b;  //重新修改了p的指向
    //*p = 1000;
    
    int const *p1 = &a;
               p1 = p;  //p1的指向也是可以改变
//    *p1 = 100;  p1指向的变量的值是不能改变的
    
    //2、const修饰的指针变量,指针变量指向的变量值可以变,指向不能变
    
    int * const p2 = &a;
    *p2 = 2000; //值可以改变
    //p2  = &b;  //p2的指向不能变
    
    //3、const修饰的指针变量的指向和值,都不能改变
    const int * const p3 = &a;
//    p3  = &b;   //只想不能变
//    *p3 = 100;  //指向的变量的值也不能变
    
    
    /*
     
     记忆技巧:
     
        看 const 和 * 的位置
     
        如果 const 在 * 的左侧  表示指针变量指向的变量的值不能变,但是指向可以改变
     
        如果 const 在 * 的右侧  表示指针变量指向的变量的值可以改变,但是指向不可以改变
     
        如果 const 出现在 *的两侧,表示指针变量的指向和值都不能改变
     
     
     */
    
    printf("a = %d
",a);

    
    return 0;
}

原文地址:https://www.cnblogs.com/aiti/p/4669405.html