我学C语言的日子(5)

数组和字符串笔记重点:

  1.元素在内存中是连续依次排列的,并且拥有下标(从0开始),叫数组
  2. 数组名是数组的起始地址。sizeof(a)求数组空间
  3. 编译器和运⾏环境都不会检查数组下标是否越界,⽆论是对数组单元做读还是写
  4.⼀旦程序运⾏,越界的数组访问可能造成问题,导致程序崩溃
  	• segmentation fault
  	• 但是也可能运⽓好,没造成严重的后果
  	• 所以这是程序员的责任来保证程序只使⽤有效的下标值:[0,数组的⼤⼩-1]
  5.元素的个数小于数组长度时,多余数组元素初始化为0

二维数组和多维数组

列数不可以省略,行数可以
两行以上的数组称之为多维数组

注意:

  1. 最好避免出现数组越界方问,循环变量最好不要超出数组的长度。
  2. C语言的数组长度一经声明,供度就是固定无法改变,并且C语言并不提供计算数组长度的方法
  3. C语言获取数组长度: int length = sizeof(arr) / sizeof(arr[0])

字符数组和字符串

char word[] = {‘h’,‘e’,‘l’,‘l’,‘o’,’!’} 字符数组,不是字符串因为不能用字符串的方式做计算(极其灵异)
char word[] = {‘h’,‘e’,‘l’,‘l’,‘o’,’!’,’\0’} 字符串 ‘\0’ 结束

  • 以0(整数0)结尾的⼀串字符
    • 0或’\0’是⼀样的,但是和’0’不同
  • 0标志字符串的结束,但它不是字符串的⼀部分
    • 计算字符串⻓度的时候不包含这个0
  • 字符串以数组的形式存在,以数组或指针的形式访问
    • 更多的是以指针的形式
  • string.h ⾥有很多处理字符串的函数

字符串的函数

  • strlen 返回s的字符串⻓度(不包括结尾的0)

  • strcmp ⽐较两个字符串,返回:
    • 0:s1==s2
    • >0:s1>s2
    • <0:s1<s2

  • strcpy把src的字符串拷⻉到dstchar * strcpy(char *restrict dst, const char *restrict
    src);
    – restrict表明src和dst不重叠
    • 返回dst
    • 为了能链起代码来

  • strcat
    • 把s2拷⻉到s1的后⾯,接成⼀个⻓的字符串
    • 返回s1
    • s1必须具有⾜够的空间

  • strchr
    • char * strchr(const char *s, int c); 从前往后 反回NULL表示没找到,否则返回字符位置地址
    • char * strrchr(const char *s, int c); 从后往前同上

  • strstr
    • char * strstr(const char *s1, const char *s2); 找到则返回词句的第一个字母地址否则反回NULL
    • char * strcasestr(const char *s1, const char *s2);

安全问题:

  1. strcpy和strcat都可能出现安全问题
  2. 如果目的地没有⾜够的空间?
    安全版本
    • char * strncpy(char *restrict dst, const char *restrict
    src, size_t n);
    • char * strncat(char *restrict s1, const char *restrict
    s2, size_t n);
    • int strncmp(const char *s1, const char *s2, size_t n);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值