注意字符数组≠字符数组字符串

即字符数组是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;如果 s1s2 则返回大于 0。 | | 5 | strchr(s1, ch);

返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 | | 6 | strstr(s1, s2);

返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。 |

字符串的输入(scanf)

char str[10];
printf("请输入字符串:");
scanf("%s", str);参数不用加&, 因为在C语言中数组名就代表该数组的起始地址
printf("输出结果:%s\n", str);

  • 如果输入字符串中含有空格,第一个空格时就会停止输入。剩下的会被认为是下一个输入
    • 所以如果要输入含有空格的字符串,得把字符串看成多个无空格字符串进行输入
  1. char str1[10], str2[10], str3[10];
  2. printf(“请输入字符串:”);
  3. scanf(“%s%s%s”, str1, str2, str3); 这里不能使用逗号作为分割,会出错
  4. 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 `

指向数组的指针

指针既可以指向字符数组,又可以指向普通字符串。用法见指针字符串