:
将字符串中每个字符的ASCLL码按先后顺序存储在一段连续的内存中,每个字符占一个字节,最后用空字符,即ASCLL码为0的字符结尾.
表示字符串的方式:
- 字符指针方式
- char *pstr = “hello”;//pstr保存字符串的首地址
- 不能通过pstr修改指向的字符串,例如:pstr[1]=‘E’
- 字符数组方式
- str[]={‘a’,‘b’,‘c’,‘ ’};//“abc”
- str[]= “abc”;
- 数组名即字符串首地址
- 可以用字面值初始化.也可以用{}初始化
- 用{}初始化需要手动显示注明结束符,否则就是一个数组
- 可以任意修改
#includeint main(void) { printf("%sn","abcd ");//%s:用于打印或者输入字符串 printf("%sn","abcd");//书写上可以省略'/0',但是实际内存必须有 printf("%sn","1234 abc");//1234 printf("hello"" worldn");//等价于Printf("hello worldn"); //指针和字符串的那点事 char *p = "abc";//定义p指针指向字符串"abc"的首地址,abc所在的内存只能读不能改 int a = 1; int b[20] = {1,2,3,4,5,6,7}; int *p2 = b; printf("%dn",*p2); int *p1 = &a;//指向a的地址 printf("%sn",p);//地址即本身,而*本身即是首字符的元素(字符串的定义) printf("%cn",*(p+1));//这是是把字符串的第一个元素按照字符的形式输出. printf("%dn",*p);//这里是把字符串的首元素按照十进制输出即内存值. printf("%dn",*p1);//这里指向了100地址的上级,即常量值 printf("%pn",p1);//这里指向100的地址(地址→常量) printf("%hhd %hhd %hhd %hhd",p[0],p[1],p[2],p[3]);//%hhd是用ascii码输出 return 0; } 结果: abcd abcd 1234 hello world 0x7ffe25e52a90 abc b 97 1 0x7ffe25e52aec 97 98 99 0
注意:给一个函数传递字符串,本质是给这个函数传递了字符串的首地址
2.数组字符串
注意:如果最后一个元素是 ,str不仅仅是一个数组还是一个字符串,否则str就是一个数组,不是字符串.
char str1[] = {'m','x','s','s','m',' '};//如果最后一个元素是 ,str不仅仅是一个数组还是一个字符串,否则str就是一个数组,不是字符串
printf("%sn",str1);
char str2[] = {"mengxiaokun"};
printf("%sn",str2);
return 0;
2.字符串的输入和输出
1.字符串的输入
- scanf(“%s”,…)
- char* gets(char*s);
- 从标准输入读取一行字符串,读走换行符即返回,并将所读到的换行符置换为结尾空字符
2.字符串的输出
- printf(“%s”,…);
- int Puts(const char* s);
- 向标准输出写入一行字符串,并追加一个换行符.
如果用scanf输入字符串,则遇到空格自动结束,代码如下:
#includeint main(void) { char str[100] = {0};//分配内存来存储输入的字符串 scanf("%s",str);//从键盘上输入字符串保存到数组str中,遇到空格立刻结束. printf("%s",str); return 0; } 开始运行... 1234 123wa 1234 运行结束。
如果用gets输入字符串,puts输出字符串,则因为gets没有检验字符串长度的功能,所以一旦超过字符串数组的长度就会报错;代码如下:
#includeint main(void) { char str[100] = {0}; gets(str); puts(str); return 0; } 开始运行... 1234 123wa 1234 123wa 运行结束。
还有一些标准c库函数
注意:该标准C库函数需要加头文件#intclude
1.strlen:获取字符串中有效字符的个数.(不包含 )
#include#include int main(void) { char *p1 = "abcdefg"; printf("%lu,%lun",strlen("abc"),strlen(p1));//%lu输出的是长整型 return 0; } 结果: 3,7 运行结束。
2.strcat:将一个字符串拼接到另一个字符串的后面
#include#include int main(void) { char *p1 = "abcdefg"; char str[]= "abcde"; char *p = str; strcat(p,"xzy");//将字符串xzy并接到字符串abcde的后面 printf("%sn",str); return 0; }
3.strcpu:字符串拷贝,将指定的字符串拷贝到指定的内存空间
#include#include int main(void) { char str2[20] = "abcd"; strcpy(str2,"123456"); printf("%sn",str2); char *p = "abcd"; strcpy(str2,p);//将p指向字符串abcd拷贝到str2中 printf("%s",str2); return 0; }
4.strcmp:字符串,从左边到右边一个字符比较,直到不相等或者字符结束不再比较
#include#include int main(void) { int ret = 0; ret = strcmp("abc","abc"); printf("%dn",ret); ret = strcmp("abd","abcd");//后者大于前者返回大于0的值 printf("%dn",ret); ret = strcmp("abc","abd");//猴子小于前者则返回小于0的值. printf("%dn",ret); return 0; }



