黑马程序员技术交流社区
标题:
IOS基础第十二天(上)字数限制,分开发,版主莫警告
[打印本页]
作者:
dushoupeng
时间:
2015-7-10 09:33
标题:
IOS基础第十二天(上)字数限制,分开发,版主莫警告
1、fgets()
该函数一个文件操作相关的函数
暂时使用这个函数可以从键盘商接收一个字符串,保存到数组中
原来接收字符串保存到数组中的方法
char str[50];
1) scanf("%s",str); //缺点:不能接收空格
2) gets(str); //优点:可以接收空格
//会有一个警告,不安全的
//不安全:比如数组长度是50,如果我们输入的
//的长度正好是50个,此时把50个字符全部存到
//数组中,存在问题 因为没有空间存放字符串结束符
fgets()是一个安全的字符串接收的函数
char ch[5]; //如果使用fgets此时数组中最多存放4个可见字符
//会自动的把数组的最后一个元素存放\0
fgets()使用格式:
fgets(数组名,数组长度,stdin);//std 标准 in 输入
fputs();也是一个文件操作相关的函数
格式:
fputs(数组名,stdout);
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
char ch[5];
//fgets从输入缓冲区读取一个字符串保存到字符数组中
//当输入的字符串的长度大于数组的长度,此时fgets会自动的
//把数组的最后一个元素变成\0
//当输入的字符串的长度小于数组长度的时候,fgets还会接收回车
fgets(ch, sizeof(ch), stdin);
//去掉多余的\n
if(ch[strlen(ch)-1]=='\n') ch[strlen(ch)-1]='\0';
//\n 它的ascii码值10
for (int i=0; i<5; i++) {
printf("%d\t",ch[i]);
}
//fputs是不会自动换行
//fputs也不能进行格式化的输出
//puts 可以自动换行
fputs(ch, stdout);
//printf("--->%s\n",ch);
return 0;
}
2.fgets(),fputs()优缺点:帮我们自动截取输入的字符串,使得我们队字符串的存取是安全的。
3.const:
1)什么是const:是一个类型修饰符,可以让变量的值不能改变。
2)作用:(1)定义常量
(2)便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
(3)可以避免意义模糊的数字出现,同样可以很方便的进行参数的调整和修改。同宏定义一样,可以做到不变则以,一变都变
(4)可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。
(5)可以节省空间
(6)提高效率
3)如何使用const
const使用的地方
1)修饰变量
int a = 10;
printf("%d\n",a); //10
a = 200;
printf("%d\n",a); //200
2)修饰指针变量
3)修饰数组
#include <stdio.h>
/**
* const修饰变量,使得变量变成常量
*/
void test1(){
//使用const修饰变量a
const int a = 10;
printf("%d\n",a); //10
//a = 200;//read-only
printf("%d\n",a); //200
}
/**
* 用指针强制修改const常量
*/
void test2(){
//使用const修饰变量a
const int a = 10;
printf("%d\n",a); //10
int *p = &a; //
*p = 100; //强制修饰常量
printf("%d,%d\n",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\n",a);
return 0;
}
4.内存分配方式:有三种
(1)从静态存储区域分配:在定义的时候已经分配好
(2)在栈上创建:在执行函数时,函数内局部变量的存储单元都可以在栈上创建
(3)从堆上分配,亦称动态内存分配:程序在运行的时候分配。Malloc或new
5.内存的分区:
BOSS段:通常是指用来存放程序中未初始化的全局变量和静态变量
数据段:用来存放程序中已初始化的全局变量和静态变量;字符串常量等
代码段:存放程序执行代码的一块内存区域
堆:存放被动态分配的内存段
栈:存放用户临时创建的局部变量
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2