/*
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;
}