字符数组 char word[] = {'H','e','l','l','o'}; 字符串 char word[] = {'H','e','l','l','o','\0'}; char word[] = {'H','e','l','l','o',0}; 当然它还是个字符数组

字符串

  • 以0结尾的一串字符
  • 0标志字符串的结束, 但它不是字符串的一部分
    • 也就是计算字符串长度的时候不包含这个0
  • 字符串以数组的形式存在, 以数组或指针的形式访问
    • 更多的是以指针的形式

#include <string.h> 里有很多处理字符串的函数


字符串常量 用""框住的就是字符串常量 c语言会自动把两对相连的引号合并起来

定义字符串变量

1️⃣ char *str="Hello";

  • s是指针, 指向一个字符串常量, 在一个很小的地方 所以”只读”不能修改

那么这个可以用在什么情况呢?

  • 当字符串作为参数传入时, 因为本来传入就是以指针的方式传入的 这里我思考了半天, 被传入的是很大的地方的, 传进去当然是很大的地方的啦, 跟定义的时候的很小的地方没关系
  • 动态分配空间, malloc拿到的是大地址

总之定义的时候地址不对, 其他只要地址对就没问题 不是说char*是个字符串

2️⃣ char world[]="Hello"; 3️⃣ char line[10]="Hello";

  • 这是可以修改的, 指向一个很大的地方 实际上是计算机帮你做了一件事, 把这个很小的地方的东西复制过来了

所以我们知道, 字符串暂时没有深拷贝, 就像数组一样(本来就是数组) 所以就要提到后面的 字符串函数


字符串的输入输出

scanf()

  • 空格, tab, 换行 作为分隔
  • 如果 %7s 就表示收7个字符
    • 小于7的当没事发生
    • 大于7的就停了, 留给下一个scanf 缓存?

char a[][10] 和 char *a[]

字符串函数