1.声明创建
/*C中没有类似于Java的String字符串类型
只能使用字符数组保存一串字符*/
//创建方式1:正确,推荐。不指定数组长度,其自动根据初始化的字符串计算
char str1[] = "a st"; //默认追加一个'\0'到结尾,表示字符串结束
printf("str1:%s\n", str1); //str1:a st
//创建方式2:错误。指定数组长度,但小于初始化值长度,索引1不是'\0',没有结束标识
char str2[2] = "a str"; //长度为2,索引为0、1。1位置不是'\0',舍弃初始值后续索引,继续读取内存
printf("str2:%s\n", str2); //str2:a a st //读完本变量后读上一个变量
//创建方式3:正确,但不推荐。指定数组长度,但大于初始化值长度,超出的索引自动填充'\0',浪费内存
char str3[9] = "a strr"; //读取到‘r’后第一个'\0'即结束
printf("str3:%s\n", str3); //str3:a str
printf("str3[6]:%s\n", str3[6]); //str3[6]:(null)
//创建方式4:不指定数组长度,不使用'\0'结束,这是一个字符数组!不是字符串!
char str4[] = {'a', ' ', 's', 't', 't'};
printf("str4:%s\n", str4); //str4:a stt
//创建方式5:正确,但不推荐。这是字符数组,但有一位是'\0',有“一段字符串”
char str5[9] = {'a', ' ', 'i', '\0', 't', 'r'};
printf("str5:%s\n", str5); //a i
printf("str5[5]:%c\n", str5[5]); //r
printf("str5[6]:%c\n", str5[6]); //乱码
2.strlen函数
#include <stdio.h>
#include <string.h> //字符串处理
void main() {
//计算字符串中 字符 数量,不包括默认结尾的'\0'
int size1 = strlen("abcd");
printf("%d\n", size1); //4
int size2 = strlen("ab中文cd"); //每个汉字占3个字符
printf("%d\n", size2); //10
char str[] = "abcd";
int size3 = strlen(str);
int size4 = strlen("ab\0cd"); //仍旧是以第一个'\0'为结束标准
printf("%d, %d\n", size3, size4); //4, 2
char str2[] = "abcd"; //字符串,默认有'\0'结尾
char str3[] = {'A', 'B', 'C', 'D'}; //这是一个数组,没有'\0'结尾
printf("%d\n", strlen(str3)); //8。读完str3,继续读内存,直到str2结束
char str4[] = {'A', 'B', '\0', 'D'}; //数组
printf("%d\n", strlen(str4)); //2。读到'\0'结束
int i;
for(i=0; i < strlen(str4); i++){
if(str4[i] == 'A'){
printf("有A,位置%d\n", i);
//return; //结束函数
}
}
int j = -1;
while(str4[++j] != '\0'){
printf("%d...\n",i);
if(str4[j] == 'B'){
printf("有B,位置%d\n", j);
//return; //结束函数
}
}
//二维字符串数组,第一维可以不指定,第二维必须指定,并且要大于初始化的字符数量
char arrStr[4][7] = {"Asbvc", "Wde", "54377f", "ousagk"};
printf("%d\n", strlen(arrStr[1])); //3
printf("%s\n", arrStr[0]); //Asbvc
printf("%s\n", arrStr[2]); //54377f
printf("%c\n", arrStr[3][4]); //g
}
- end