二维字符数组赋值和字符串比较

一、赋值
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");
}

猜你喜欢

转载自blog.csdn.net/huanghxyz/article/details/84641549