一、赋值
1. 声明时初始化赋值
char str[][20]={"aaa","bbb","ccc"};
2. sprintf / strcpy(#include <string.h>)
char str[3][20];
sprintf(str[0],"aaa"); / strcpy(str[0],"aaa");
sprintf(str[1],"bbb"); / strcpy(str[1],"bbb");
sprintf(str[2],"ccc"); / strcpy(str[2],"ccc");
3. 使用数组指针
char *str[20];
str[0]="aaa";
str[1]="bbb";
str[2]="ccc";
二、比较
比较字符数组和字符串常量
字符串常量:字符串常量是存在程序的常量区,字符串常量代表的是其地址
例如:
char *p = "char";
char str1[] = "char";
char str2[10] = "char";
与"char"比较时,实际上是在比较地址是否相同
(p == "char") = 1
程序将“char”存在常量区,p和“char”都指向该位置
(str1 == "char") = 0;
(str2 == "char") = 0;
但是str1是内存在栈中开辟一个长度为5的空间存放"char",str2是在栈中开辟一个长度为10的空间存放"char"(末尾都以'\0'结尾)。
strcmp(#include <string.h>)
strcmp(char* str1, char* str2)
相等返回0
str1 < str2 返回负数
str1 > str2 返回正数
(大小对应ASCII编码)
(对具体的数值没有规定,常用编译器是-1和1,但为了跨平台兼容性,不应以此为判断)三、char,undesigned char
不管是char还是U8(undesigned char),int等,进行字符串格式化后都可以进行比较。
理解是字符对应的是ASCII,比较的是实际存储的编码,只要都能完全表示就可以。其实char的范围是0~127,ASCII编码也是0~127,而U8是0~255,更不用说int等,都远超过了char对应ASCII的范围。
undesigned char buff[100];
char c[20]="abc";
sprintf(buff, "%s", c);// 也可以用strcpy(buff, "abc");
if(strcmp(buff, c)==0)
{
printf("比较成功\n");
}