Day13_字符串、指针数组

day13_字符串、指针数组

2013年10月19日 星期六 09时58分24秒

程序在内存中是分段落存放的
代码段  程序中的所有语句存放在这个段落中,运行时不可以被修改
全局段  存放全局变量和静态变量,大小不会随着程序的运行而改变
栈  存放局部变量,块变量,形参,返回值,大小会随着程序的运行而改变
  变化方式遵循后进先出原则
  每个函数在运行的时候都会从栈中分配一段空间
  当函数结束的时候它所分配的空间被计算机回收
堆  堆中变量的生命周期由程序控制


字符串:
由一组连续的字符变量构成的,所有字符串必须以字符'\0'作为结果
计算机中使用第一个字符变量的地址表示整个字符串

字符串的地址数据可以存放在一个char*类型的指针变量中

字符串有两种来源,分别对应程序中两种不同的写法

字符串的字面值是一种字符串的来源,例如"abc","124"等
字符串字面值在编译的时候会直接用首字符地址替换掉,并且在最后加上字符'\0'
字符串字面值在程序运行时存储在专门的段落里,这个段落是不可以修改的
多个同样的字符串字面值在运行时只有一份
两个连续的字符串字面值可以被合并成一个  "abcde"=="ab""cde"

字符串的另外一种来源是字符数组
只有包含'\0'字符的数组才可以当字符串使用  '\0'以前的字符属于字符串
可以直接使用字符串字面值对字符数组进行初始化,字面值最后的'\0'也会被赋值到字符数组中
初始化完成后字符数组和字面值存放在不同的地方
字符数据存放的位置不确定,但一定是可以被修改的

C语言中提供了一组函数用来对字符串进行操作
为了使用这些函数需要包含string.h文件

strlen    用来计算字符串中有效字符的个数
strcat    用来合并两个字符串
    参数表示的字符串后面把合并好的字符串首字符地址作为返回值
    如果第一个参数表示的字符数组中变量个数不够可能会发生溢出
strncat    功能和strcat一样,可以避免溢出问题
strcmp     比较两个字符串的大小,用返回值表示比较结果
strncmp    仅比较两个字符串的前N个字符
strcpy     复制字符串:第一个参数是一个字符数组,第二个参数表示要复制的字符串
           用新字符串的首字符地址作为返回值
strncpy    只复制前n个字符

练习:
 编写mystrlen函数
 
读取和打印字符串的时候都可以采用%s作为占位符
从键盘读字符串之前必须首先声明一个字符数组

fgets函数可以从任何文件读字符串,并放置在一个数组中
在linux系统中所有设备都可以当作文件使用(stdin代表的就算标准输入文件,键盘)
fgets函数需要三个参数
1.数组名称
2.数组中变量个数
3.读取的文件(stdin表示标准输入文件,通常就是键盘)

如果输入内容不够多则会把最后的换行字符读入到数组中

fgets(buf,20,stdin);
if(strlen(buf) == 19 && buf[18] != '\n')
{
 scanf("%*[^\n]");   //把所有不是换行符的字符丢掉
  scanf("%*c");       //清理第一个字符
}

练习:
 编写一个模拟登陆程序
---------------------------------------------------------
二维字符数组可以用来表示多个相关字符串

指针数组也可以用来表示多个相关字符串
指针数组声明如下:
char *strs[5] = {};

预习:
 1.主函数的参数
 2.文件位置指针
 3.预处理指令
 4.多文件程序的编写
 
作业:
 1.编写mystrcat函数
 2.编写indexof字符串函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值