C语言中没有类似于C++或Java中的string
类型,如果要在C中表示字符串,可用字符数组的形式,数组的概念可戳此链接了解。
在C++中,string
类库可以更简单的表示和使用字符串,可戳此链接了解string
类。
C语言中字符串是以空字符\0
结尾的char
类型数组。本文简单讲解它的基本知识和函数。
字符串
字符串通常用双引号"
括起来,称之为字符串常量,编译器会自动在末尾加上空字符\0
,例如
char str[50] = "Hello World!";
字符串的空格也会囊括在内,也可按照下面这种方式创建
char str[50] = "Hello " "World!";
多个双引号之间会自动串联起来,上面两种方式等价。方括号中的数字可以省略,编译器会自动计算数组大小,如
char str[] = "Hello World!";
字符串也可按照一般数组的方式定义,如
char str[50] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0'};
这种方式比较麻烦,而且尤其要注意最后的空字符\0
。
空字符\0
也占位置,指定数组大小时要保证是字符串长度加1。
还可用指针的方式创建字符串,如
char * ptr = "Hello World!";
字符串函数
C语言库提供了多个字符串处理函数,它们都包含在string.h
中,因此要使用这些函数必须包含这个头文件
#include <string.h>
- strlen()
统计字符串长度,如
strlen(str);
返回字符串长度值。
- strcat()
用于字符串拼接,把字符串str2
附加在字符串str1
后面,字符串str2
不变,如
strcat(str1, str2);
返回第1个字符串地址。
要注意字符串str1
的大小能够容纳下拼接后的字符串。
- strncat()
同样用于字符串拼接,并指明添加字符数,如
strncat(str1, str2, 5);
在加到第5个字符或遇到空字符时停止。
可弥补strcat()
函数的不足。
- strcmp()
按照字典序(ASCII码)依次比较两个字符串的字符,如
strcmp(str1, str2);
当str1
在str2
前面时,返回负数;如果相同返回0;如果在后面返回正数。返回的值取决于实现。
该函数比较的是字符串,而不是字符。比较字符可直接使用逻辑运算符。
- strncmp()
指定需要比较的长度,如
strncmp(str1, str2, 5);
限定函数只比较前5个字符。
strcmp()
函数会一直比较到末尾。
- strcpy()
字符串拷贝,相当于字符串的赋值操作,如
strcpy(str1, str2);
把字符串str2
拷贝到字符串str1
,str1
称为目标字符串,str2
称为源字符串。
要注意源字符串的大小能否容纳得下。
该函数返回的类型是char *
,是第1个参数的地址。
该函数还可指定拷贝的位置,如
strcpy(str1 + 5, str2);
可以保留str1
第0到第4个位置的字符。
- strncpy()
该函数同样是拷贝字符串,并可指定拷贝的最大字符数,如
strncpy(str1, str2, 5);
把str2
中的第5个或空字符之前的字符拷贝到str1
中。
拷贝的副本中不一定有空字符\0
。
弥补strcpy()
函数的不足
- sprintf()
该函数在stdio.h
中,而不是string.h
。把数据写入字符串。
该函数第一个参数是目标字符串地址,其余参数和printf()
相同。戳此处查看print()
函数的用法。
输入与输出
C语言字符串有专门的输入和输出函数,详细可戳此链接。