目录
字符串的声明和初始化
在 C 语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。
声明和初始化一个abc字符串:
char site[4] = {'a', 'b', 'c', '\0'};
简化:
char site[] = "abc";
字符串的内存表示

因此,
\0是用于标记字符串的结束。- 由于在数组的末尾存储了空字符
\0,字符数组的大小比实际存储的字符数多一个。 - 字符串
char site[]="abc"中site表示字符串第一个字符'a'的地址
字符串的输入输出
输入
- 1.
scanf("%s",a(地址),n)=>stdio.h n表示至多读取n-1个字符,即n表示输入的字符串的最大长度(包括\0)
遇到空格等空字符会返回,不读取空格等空字符- 1.1
scanf("%[^o]",a(地址),sizeof(a))=>stdio.h %[^o]使输入遇到o字符再返回,不读取o字符- 2.
gets(s)=>stdio.h - 从标准输入(键盘)读入一行数据,所谓读取一行,就是遇到换行符就返回。
gets()函数读取空格,不读取换行符\n,它会把换行符替换成空字符\0,作为c语言字符串结束的标志
输出
- 1.
printf("%s",a(变量名))=>stdio.h - 输出字符串a
- 2.
puts=>stdio.h - 用于显示字符串,并自动在字符串后面添加一个换行标志
\n。
字符串相关函数
PS:若无特殊说明,函数返回值一般为int型。
- 1.
n=strlen(s)=>string.h - 得到字符串s的长度不包含'\0',返回给n;
- 2.
long int n=strtol(s,&ptr,base)=>stdlib.h - 把指针
s所指向的字符串根据给定的base(指s中的数值的进制) 转换为一个长整数(10进制,类型为 long int 型),base必须介于 2 和 36(包含)之间,或者是特殊值 0。
&ptr是对类型为char*的对象的引用,其值由函数设置为s中数值后的下一个字符
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s[30] = "2030300 This is test";
char *ptr;
long ret;
ret = strtol(s, &ptr, 10);
printf("数字(无符号长整数)是 %ld\n", ret);
printf("字符串部分是 |%s|", ptr);
return(0);
}
运行结果:

- 3.
strcpy(a,b)=>string.h - 把字符串b复制给a
- 4.
n=strcmp(a,b)=>string.h - 判断字符串a和b的大小,按字符串长度和字典顺序
if(a<b),n<0;if(a==b),n==0;if(a>b),n>0. - 5.
strcat(a,b)=>string.h - 把b字符串接到a的后面,a要足够大
6.(指针)p=strchr(a,c)=>string.h
返回字符串a中字符c第一次**出现的地址
7.(指针)p=strrchr(a,c)=>string.h
返回字符串a中字符c最后出现一次的地址
8.(指针)p=strstr(a,b)=>string.h
返回字符串a中第一次出现子字符串b的地址
总结
c语言中的字符串由一个或多个字符组成,以空字符结尾,但字符串长度不包括空字符。
字符串常常用字符数组char a[n]和指针char *p=a来表示。
对字符串操作时要注意数组长度足够大,否则会导致数组越界。