C语言,字符串

字符数组
char word[] ={‘H’,’e’,’l’,’l’,’o’,’!’};
But, 这个叫字符数组,并不是字符串。

字符串
char word[]={‘H’,’e’,’l’,’l’,’o’,’\0’};
\0 就是代表一个整数0.

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

char *str =”Hello”; 这个str的指针,指向了一个hello的字符串
char word[]= “Hello” 这有一个数组,他为hello
char line[10] = “Hello” 这有一个数组,是十个这么大,放了hello进去,但是他占了6个部分。
“Hello”会被编译器变成一个字符数组放在某处,这个数组的长度是6,结尾还有表示结束的0;
两个相邻的字符串,编译器会将两个自动连接起来。

总结:
是以字符数组的形态存在的。
不能用运算符对字符串运算。
通过数组的方式可以遍历字符串。
唯一特殊的地方是字符串字面量可以用来初始化字符数组。
标准库提供了一系列的字符串函数。

字符串变量
char *s = “Hello,world!”;
char *s2 = “Hello,world!”;
两者的地址是一样的。地址很小,位于程序的代码段,并且是只读的,不能改变值。只能读,不能写。

如果需要修改字符串,则需要用数组 char s[] = “Hello, world!”;如果有上面那段和这个在一起,那编译器会将上面只读的部分,拷贝一份到你这里可处理的地方。

当我们需要一个字符串,需要指针还是数组?
如果表示成一个数组,说明这个字符串就在这里。作为本地变量空间会被回收。
如果作为一个指针,我不修改它,它可以用作处理参数。同时动态分配空间。

因此,如果要构造一个字符串–用数组。
如果要处理一个字符串–用指针。

字符串可以表达为char*的形式, 但char*不一定是字符串
只有字符数组有结尾的0,才能说它是字符串。

字符串的输入和输出
字符串的赋值
char *t=”title”;
char *s;
s=t ;
并没有产生新的字符串,只是让指针s指向了t所指的字符串,对s的任何操作就是对t做的。

char string[8];
scanf(“%s”,string);
printf(“%s”,string);

scanf中的%s只会读入一个单词(到空格、tab或回车为止)
因为scanf是不安全的,因为不知道要读的内容的长度。
安全的做法scanf(“%7s”,string); 7这个数字表明,我最多能读7个字符。超过我就不要了。
剩下的会交给下一个scanf。
注意:指针需要初始化。

“”这意味着一个空的字符串 第一个数[0]=就是0

buffer[]=”“; 这个长度就只有1 放不下任何的字符串。

字符串函数

strlen strlen(const char *s) 返回s的字符串长度(不包括0),const是保证不会修改字符串的长度。

strcmp(const char *s1, const char *s2); 比较两个字符串。
返回0—代表相等; 返回1 代表1>2; 返回-1 代表1<2; 这个函数的运行原理实际是 字符串1中的每一个数值,去减字符串2中对应的数值。 意思就是a[1]-b[1] a[2]-b[2].

strcpy(const char *s1, const char *s2) s2的内容,拷到s1里。不管原来s1那个位置里有什么。老子就是要拷。

srtcat(const char *s1, const char *s2) s2拷贝到s1后面,返回s1.s1必须具有足够的空间

安全的版本
str’n’cpy n代表最多能复制的上限。
str’n’cat

char *strchr(const char*s1,const char *s2) 从左开始字符串中找字符c。找到了第一个的位置的指针。
char *strrchr(const char*s2,const char *s2) 从右开始字符串中找字符c

返回null则没找到。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值