字符数组
1.定义初始化
单个字符初始化Char str[]={'a','b','c'};
字符串初始化 char str[]="abc";字符串会比字符多一个尾符号'\0'
初始化后str="abc"是错误的不能赋值。
2.输入输出
2.1输入字符串:char str[3]; gets(str);puts(str)其中gets有溢出风险。输入
abc时能够保存,但已经溢出,因为存储的是abc\0.
2.2输入字符串:scanf("%s",str);不用&因为str本身就是地址
输入时遇到空格就会停止,例如:hello word 只保存hello
3.常用函数<string.h> char str[]="hello";
Strlen(str);字符串长度结果是5,其遇到\0就结束了,故比sizeof小
Sizeof(str);占内存结果是6。
Strcpy(str,"abcdefg");拷贝。遇到\0结束会越界。
Strncpy(str,"abcdefg",num);最多把num长的拷贝过去
Strcat(str,"abc");把字符串链接到str,会溢出
Strncat(str,"abc",nun);最大链接num长的字符串
Strcmp(str1,str2);可以比较长度。返回int型,把两者的阿斯克码相减,返回正值str1长
Strncmp(str1,str2,num);可以比较前num位是否相同,相同返回0。
4.例题:
单词计数
static void wordcount()
{
char str[128];
int i,count=0,flag=0;
printf("input:\n");
gets(str);
for(i=0;str[i] !='\0';i++)
{
if(str[i]==' ')//判断是用双等号
{
flag=0;//flag标记之前是否空格,是空格才能证明下一个字符是开始位置
}
else
{
if(flag == 0)//flag==0证明前一位是空格,这是单词开头
{
count++;
flag=1;
}
}
}
printf("the count is %d\n",count);
}
[tom@CentOS7 arr]$ ./arrc
input:
i am a student
the count is 4
多维数组
【存储类似】 数据类型 变量名 [2] [3] [4];