在C语言中没有字符串类型,是用字符数组末尾加’/0’来表示字符串。
(1)语法:
第一种:char str[实际长度+1] = {‘a’,’b’,’c’,’\0’};
第二种:char str[ ] = {‘a’,’b’,’c’,’\0’};
第三种:char str[实际长度+1]=“abc”;
第四种:char str[ ]=“abc”;
(2)输入:scanf (“%s”,str); gets(str);
输出:printf(“%s”,str); puts(str);
注意:字符串用的格式化控制符是%s;
数组名是一个地址常量,所以用scanf进行输入的时候,只写数组名就可以了不需要加&;
准备输入的时候,数组一定要够长,否则可能会越界,出现未知错误
(3)字符串的三种表示法:
第一种:数组表示法:char str[ ]=“abc”;
第二种:指针表示法:char *str=“abc”;
第三种:常量表示法:”abc”;
(4)数组表示法和指针表示法的区别:
数组表示法可以改变里面的值,指针表示法不可以;
数组表示法可以接受用户输入的值,指针表示法不可以;
数组表示法不可以用==来判断2个字符串是否相等,指针表示法可以。
以上区别的原理:在内存中有一个常量区,用来存放常量,常量区中的内容不允许改变;还有一个栈区,用来存放变量。当用户输入一个char str[ ] = “abc”;时,首先在常量区中开辟一块空间,用来存放“abc”,然后在栈区中开辟一个空间str,再将常量区中的“abc”复制一份到str中。当用户输入char *str = “abc”时,常量区的操作一样,但是栈区中开辟的空间str存放的是常量区中存放“abc”的内存地址。因此,使用指针表示法时,你实际尝试去改变的是常量区中的数值,所以不允许改变。当指针表示法用==判断是否相等的时候,(例:char *str = ‘abc' str == “abc”),其实两边的值都是内存地址,所以可以用==来判断。
(5)字符串常用函数:
strcmp:常用来表示2个字符串的大小
用法:strcmp(str1,str2);
原理:按照字符串的第一个字母进行比较,如果不等,返回差值;如果相等,则比较第二个字母,如果还相等则继续比较,如果全部相等,返回0
strcpy:将第二个字符串的值复制到第一个字符串,如果第一个字符串有内容,则覆盖
用法:strcpy(str1,str2);
strcat:将第二个字符串的内容接到第一个字符串后面
用法:strcat(str1,str2);
strlen:计算字符串的长度
用法:strlen(str);