注意字符数组≠字符数组字符串
即字符数组是char greeting[5] = {'H', 'e', 'l', 'l', 'o'};
字符数组字符串是char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
注意strlen只能用于字符串
即不能用于字符数组,但是可以用于字符数组字符串。用于字符数组得到的结果有问题
字符串
在 C 语言中,字符串实际上是使用 null 字符 ‘’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。
即char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};可以简化为char greeting[] = "Hello"
- 实际上字符串就是默认为\0的字符数组,字符串会自动在末尾添加
'',不需要你自己添加 - 字符串可以直接输出,如
printf("hello") 或者printf(str); 指针字符串也是一样,直接printf(p) c语言中连接字符串不需要任何符号,直接
printf("lo""ve");但是变量和变量,变量和字符串常量不能直接连接,必须借助格式控制符如printf(a","b); 错指针字符串
指针字符串:
char *p={"hello"};printf(p); ->hello无中括号,无(但是可以`**(&p)*),大括号可以省略<br />指针字符数组:char p[]={“hello”};printf(a); ->hello` 必须有中括号,必须有,大括号不可以省略注意指针字符串和指针字符数组用法不一样
- 而普通字符串用法则等于普通字符数组
- 不符合规则结果一定错误。但是编译器却只给警告
- 跟普通字符串一样,格式控制符%s也是可有可无的
- 指向数组的指针即指针字符串
操作字符串的函数
以下函数建议引入string.h 但是不引入也能正确运行,会警告
| 1 | strcpy(s1, s2);
复制字符串 s2 到字符串 s1。 会覆盖原内容 | | —- | —- | | 2 | strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。 |
| 3
3.5 | strlen(s1); 用于字符数组字符串或者指针字符串时,返回字符个数
sizeof(s1); 用于字符数组字符串时,返回数组长度,即字符数+1; 用于指针字符串时,返回不知道什么意思的结果 |
| 4 | strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 | | 6 | strstr(s1, s2);
返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。 |
字符串的输入(scanf)
char str[10];printf("请输入字符串:");scanf("%s", str);参数不用加&, 因为在C语言中数组名就代表该数组的起始地址printf("输出结果:%s\n", str);
- 如果输入字符串中含有空格,第一个空格时就会停止输入。剩下的会被认为是下一个输入
- 所以如果要输入含有空格的字符串,得把字符串看成多个无空格字符串进行输入
- char str1[10], str2[10], str3[10];
- printf(“请输入字符串:”);
- scanf(“%s%s%s”, str1, str2, str3); 这里不能使用逗号作为分割,会出错
- printf(“输出结果:%s %s %s\n”, str1, str2, str3);//%s间要加空格,这样才能跟输入的数据一致
字符型指针数组
创建字符型指针数组以保存字符串时,可以直接char *p="hello"; 输出时也是%s p进行输出,无需取地址
注意输出字符数组和字符型指针数组还有字符串时,使用%s配合数组名/字符串名自然可以直接输出一串字符串。但是如果使用%c输出第一个字符时,要么使用下标,要么使用*数组名
即char str[] = "Hello"; printf("%c",*****str);
putchar
putchar可以输出普通字符串和指针字符串的第一个字符,但是都必须使用取值符
`char b[]=”7ds”; char b=”9ds”;<br />putchar(b);putchar(b); ->79 `
指向数组的指针
指针既可以指向字符数组,又可以指向普通字符串。用法见指针字符串
