字符数组与字符串区别
- C语言中没有字符串这种数据类型,可以通过char的数组来替代
 - 数字0(和字符 ‘\0’ 等价)结尾的char数组就是一个字符串,字符串是一种特殊的char的数组
 

- 如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组
 
#include <stdio.h>int main() {char c1[] = {'c', ' ', 'p', 'r', 'o', 'g'}; // 普通字符数组printf("c1 = %s\n", c1); // 有可能乱码,因为没有'\0'结束符// 以'\0'('\0'就是数字0)结尾的字符数组是字符串char c2[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0'};printf("c2 = %s\n", c2);// 字符串处理以'\0'(数字0)作为结束符,后面的'h', 'l', 'l', 'e', 'o'不会输出char c3[] = {'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0'};printf("c3 = %s\n", c3);// 使用字符串初始化,编译器自动在后面补0,常用char c4[] = "c prog";printf("c4 = %s\n", c4);return 0;}
字符串的输入输出
int main() { char str[100];
printf("input string1: ");// scanf("%s",str) 默认以空格分隔// 可以输入空格gets(str);printf("output: %s\n", str);return 0;
}
<a name="EzegD"></a># 字符指针- 字符指针可直接赋值为字符串,保存的实际上是字符串的首地址- 这时候,字符串指针所指向的内存不能修改,指针变量本身可以修改```c#include <stdio.h>int main() {char *p = "hello"; // 和 const char *p = 'hello' 等价,有没有const都一样// 指针变量所指向的内存不能修改// *p = 'a'; // errprintf("p = %s\n", p);// 指针变量可以修改p = "world";printf("p = %s\n", p);return 0;}
字符串常用库函数
strlen
函数说明:
#include <string.h>size_t strlen(const char *s);功能:计算指定指定字符串s的长度,不包含字符串结束符‘\0’参数:s:字符串首地址返回值:字符串s的长度,size_t为unsigned int类型,不同平台会不一样
示例代码:
#include <stdio.h>#include <string.h>int main() {char str[] = "abcdefg";int n = strlen(str);printf("n = %d\n", n);return 0;}
运行结果:
n = 7
strcpy
函数说明:
#include <string.h>char *strcpy(char *dest, const char *src);功能:把src所指向的字符串复制到dest所指向的空间中,'\0'也会拷贝过去参数:dest:目的字符串首地址,如果参数dest所指的内存空间不够大,可能会造成缓冲溢出的错误情况src:源字符首地址返回值:成功:返回dest字符串的首地址失败:NULL
示例代码:
#include <stdio.h>#include <string.h>int main() {char dest[20] = "123456789";char src[] = "hello world";strcpy(dest, src);printf("%s\n", dest);return 0;}
运行结果:
hello world
strcat
函数说明:
#include <string.h>char *strcat(char *dest, const char *src);功能:将src字符串连接到dest的尾部,‘\0’也会追加过去参数:dest:目的字符串首地址src:源字符首地址返回值:成功:返回dest字符串的首地址失败:NULL
示例代码:
#include <stdio.h>#include <string.h>int main() {char str[20] = "123";char *src = "hello world";strcat(str, src);printf("%s\n", str);return 0;}
运行结果:
123hello world
strcmp
函数说明:
#include <string.h>int strcmp(const char *s1, const char *s2);功能:比较 s1 和 s2 的大小,比较的是字符ASCII码大小。参数:s1:字符串1首地址s2:字符串2首地址返回值:相等:0大于:>0小于:<0
示例代码:
#include <stdio.h>#include <string.h>int main() {char *str1 = "hello world";char *str2 = "hello mike";if (strcmp(str1, str2) == 0) {printf("str1==str2\n");} else if (strcmp(str1, str2) > 0) {printf("str1>str2\n");} else {printf("str1<str2\n");}return 0;}
运行结果:
str1>str2
字符串案例
// 函数定义 int my_strlen(char * temp) { // 定义一个累加个数的变量,初始值为0 int i = 0; // 循环遍历每一个字符,如果是’\0’跳出循环 while (temp[i] != ‘\0’) { // 下标累加 i++; }
return i;
}
int main() { char *p = “hello”; // 函数调用 int n = my_strlen(p); printf(“n = %d\n”, n);
return 0;
} ```
