字符串
- C语言没有 “字符串”数据类型, 使用字符数组或字符指针进行操作
- 一维字符数组和单个字符串
- 长度为 n 的字符数组最多可以存放n-1个字符
- 初始化:
char string[10] = {‘h’, ‘i’, ‘\0’};
char str[10] = { “hi” }; char str[10] = “hi” ;
char str[] = { “hi” }; char str[] = “hi” ; 注:未指定长度,自动匹配,内存实际分配空间多一个单位
char str[10]; str = "I like C"; X错误语句:str为地址常量,不能操作
- 二维字符数组和多个字符串
- 初始化: 行数可以省略
char s[3][10]={{“Pascal”},{“Java”},{“Python”}};
char s[3][10]={“Pascal”,“Java”,“Python”};
- 字符指针
- 字符的输入输出:
- getchar()接受单个字符放入缓冲区,键入回车ENTER才给程序使用,返回值为ASCII整数值。
- putchar()输出单个字符变量。
putchar('a'); putchar(97); 都是输出字符a
- 字符串的输入输出
- 使用 %c + 循环,%s 利用scanf()、printf()
- 使用专门函数:
- char *gets(char *s); 从键盘输入一个字符串,输入参数为字符指针或字符数组名,返回值为指向char类型的指针,即返回一个字符串的首地址。输入的字符串可以包含空格、TAB,回车为终止符。
- int puts(char *s); 将一个字符串输出到终端,执行成功返回非负整数 (注意:相对于ptintf() 速度更快,占用内存更小,自动换行)
- 字符串操作函数 <string.h>
- 求长度:int strlen (char *s);
注意:字符数组或字符指针做函数参数时,只传字符串首地址,不传长度;数值型数组或指针做参数时,既要传首地址也要传长度。 - 复制函数:char *strcpy(char *dest, char *src);
注意:dest长度 ≥ src长度char str1[30]="abcde"; 或 char str1[30]; strcpy(str1,"abcde");
- 连接函数:char *strcat(char *dest, char *src);
注意:dest不能为字符串常量,例如strcat(“123”,“456”)错误;不能自己连接自己,缺失结束符! - 比较函数:int strcmp(char *s1 ,char *s2);
注意:不能使用 " == "来比较字符串
- 字符串类型与数值类型转换 <stdlib.h>
- void itoa(int n , char s[] ,int radix); 将整数转换为指定进制的字符串 , radix:2~36
- int atoi(char *nptr);将字符串转换为整数
- long atol(char *nptr);将字符串转换为长整数
- double atof(char *nptr);将字符串转换为浮点数
- 其他函数
- 查找:char *strstr(char *s1,char *s2); 成功:返回地址指针;失败:返回NULL
内存分配 <stdlib.h>
- 静态内存分配:程序代码编译时,进行内存分配
- 动态内存分配:程序执行时,进行内存分配回收,成对使用
void *malloc (unsigned size); void free(void *ptr);