字符数组
// 声明
char a[] = {'a', 'b', 'c'};
字符串( 字符数组最后加一个\0就是字符串了 )
// 使用字符串处理函数需引入
// 结尾的 \0 也占一个长度,str是常量指针是只读的,所以不能修改
char *str = "abc";
// 如果要修改字符串,应该使用字符数组
char str[] = "abc";
char str[] = {'a', 'b', 'c', '\0'};
// 使用指针还是字符数组
指针:作为函数的参数
动态分配空间(空间是malloc分配的)
数组:作为本地变量空间自动被回收(可以被修改)
字符串数组
// a是一个指针,指向另一个指针,那个指针指向一个字符(串),
char **a;
// 下面两个是不相等的
char *a[] = {"hello", "world"}; // 里面的值可以被修改
char a[][10] = {"hello", "world"};
// main函数的第二个参数就是一个字符串数组
int main(int argc, char **argv)
字符输入输出
// int putchar(int c);
// 向标准输出写一个字符
// 返回写了几个字符,EOF(-1)表示写失败
// int getchar(void);
// 从标准输入读入一个字符
// 返回类型是int是为了返回EOF(-1)-- 返回EOF结束输入
// windows : ctrl-z
// unix : ctrl-d
// 实例 EOF是系统定义的宏
int ch;
while((ch = getchar()) != EOF){
putchar(ch);
}
字符串函数
// #include
// strlen 字符串长度(不包括结尾的0)
int main(int argc, char **argv) {
char a[] = "hello";
int len;
len = strlen(a);
printf("%d", len); // 5
// 6
return 0;
}
// strcmp 字符串是否相同(按ASCII码值去比较)
int main(int argc, char **argv) {
char a[] = "hello";
char b[] = "hello";
printf("%d\n", strcmp(a, b); // 不为0表示不相同
printf("%d", a == b); // == 表示两个表量是否是相同的地址,所以不能这样比较两个字符串是否相等
return 0;
}
// strcpy 拷贝字符串,安全版本strncpy,strncpy(dst, src, len);
int main(int argc, char **argv) {
// strcpy(char *restrict dst, const char *restrict src);
// 把src的字符串拷贝到dst,restrict表明src和dst不重叠(c99)
// 返回dst
char src[] = "hello";
char dst[10];
strcpy(dst, src);
printf("%s", dst);
// 常见使用方法,复制一个字符串+1代表给 \0 也申请一个空间
char *dst = (char*)malloc(strlen(src)+1);
strcpy(dst, src);
return 0;
}
// strcat 字符串拼接,安全版本strncat,strncpy(s1, s2, len);
int main(int argc, char **argv) {
// strcat(char *restrict s1, const char *restrict s2);
// 把s2拷贝到s1后面,返回s1,s1必须有足够的空间
char s1[6] = "hello";
char s2[] = "wold";
strcat(s1, s2);
printf("%s", s1);
return 0;
}
// strchr 字符串中查找字符
int main(int argc, char **argv) {
// strchar(const char *s, int c); 从左开始找
// strrchar(const char *s, int c); 从右考试找
// 返回的是指针,返回NULL表示没有找到
char s[] = "hello";
char *p = strchr(s, 'l'); // 查找第一个l出现的位置
p = strchr(p+1, 'l'); // 查找第二个l出现的位置
printf("%s", p); // llo
// 返回第一个l前面的字符串
char c = *p;
*p = '\0';
char *t = (char*)mallog(strlen(s)+1);
strcpy(t, s); // t里面就是he
return 0;
}
// strstr 字符串中查找字符串
int main(int argc, char **argv) {
// strstr(const char *s1, const char *s2);
// strcasestr(const char *s1, const char *s2); 忽略大小写
// 返回一个指针
char s1[] = "hello";
char s2[] = "llo";
char *p = strstr(s1, s2);
printf("%p", p);
return 0;
}