string操作、文件操作

程序在内存中是分段落保存的
代码段   存放所有语句,在运行是内容不可以修改

全局段 用来存放全局变量和静态变量,大小不随着程序的运行而改变


采用后进先出的管理方式,大小随着程序的运行不断变化
                栈里为每个函数的每次运行分配一个私有的区域
                每次函数运行结束后它的私有区域被回收
                局部变量,形式参数,和返回值都放在栈里

        堆          存放动态分配的数据,堆中变量的生命周期是程序员管理的


C 语言中使用内存中一组连续的存储位置表示文字信息
ASCII 码为 0 的字符用 '\0' 表示,它用来表示一段文字信息的结束位置
这些存储位置叫做字符串

字符串的开始位置使用第一个字符存储位置的地址表示


    C 语言中可以使用一个 char* 指针变量表示一个字符串
字符串字面值是实现字符串的一种方法,例如 "abc","3+4%6",两个双引号之间
编译器在编译时自动给字面值加 '\0' 结尾字符
编译器自动把字符串字面值替换成首字符地址
    在程序运行时字符串字面值被存储在专门的段落里,这个段落是不可修改的
    多个同样内容的字符串字面值在程序运行时只占有一份内存空间
并列的多个字符串字面值在编译时会被合并成一个字面值
C 语言中也可以使用字符数组表示字符串
编译器不会自动向字符数组中加 '\0' 字符
char buf[] = {'a','b','c','\0','d','e'}  表示 "abc" 字符串
可以使用字符串字面值给字符数组进行初始化 字面值最后的 '\0' 会被加到字符串数组的后面
char buf[] = "xyz" ;包含四个字符 数组里会加 '\0' 
sizeof(buf) = 4;
char buf[3] = "xyz" ; 数组不是字符串,没位置加 '\0'
初始化完成后字面值和字符数组各自有自己的存储位置互相之间没有关系

字符数组在内存中存放的段落不确定但一定是可以修改的


    C 语言提供多种对字符串进行操作的标准函数
    这些标准函数都需要包含 string.h 文件
    strlen    用来获得字符串中有效字符的个数
    strcat    把一个字符串追加在另一个字符串的后边,返回值表示合并后的结果
              会修改一个参与计算的原字符串,有可能造成数组越界
    strncat   功能类似 strcat 不会数组越界
    strcmp    用来比较两个字符串是否相等,比较依据是字符数据的 ASCII 码
              前一个字符串大时返回 1,后一个字符串大时返回 -1 ,相等是返回 0
    strncmp   只比较两个字符串前 n 个字符
strcpy    用来把一个字符串的内容复制到一个字符数组中
         返回值就是字符数组的首地址,这个函数也可能造成越界
    strncpy   可以只复制 n 个字符
可以使用 %s 做占位符对字符串进行读取和打印操作
使用 scanf 标准函数读字符串会出严重错误
fgets     标准函数可以从任何文件读字符串
在 LINUX 系统所有设备都是文件,键盘和屏幕都可以用文件表示
在程序中可以使用 stdin 表示标准输入文件(通常情况下就是键盘)
    fgets 函数需要三个参数
1.字符数组名称
2.数组中存储位置的个数
3.要读取的文件 (stdin) 
每次使用 fgets 读字符串后都要处理输入缓冲区中的垃圾数据
    
二维字符数组可以用来记录多个相关字符串
这种存储方式不灵活
指针数组也可以用来表示多个相关字符串
这种存储方式非常灵活
    指针数组名称可以赋值给二级指针

主函数也有形参,第二个形参表示一组相关字符串,第一个形参表示相关字符串的个数


1.文件位置指针
2.预处理指令 (宏定义,条件编译...) 
3.多文件的编写


练习    

    1.编写 mystrcat 函数,实现 strcat 函数的多有功能 , 指针编写
    2.编写两个程序,把用户输入的包含多个成绩的字符串拆分成多个成绩字符串并分别记录在二维数组或指针数组中,结果打印出来,成绩个数不超过 5 个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值