内容纲要
定义一个字符数组:
char ch[]={'t','o','u','g','h'};
定义一个字符串:
char ch[]={'t','o','u','g','h','\0'};
可见字符数组占5个字节,字符串占6个字节,字符串是以'\0'结束的;
其中 0等价于'\0',但是'0'和'\0'却是不等价的,因为字符'0'的ASCII码对应的是数字48。
字符串拼接
//字符数组和字符串
int main()
{
//字符串的拼接
char ch1[] = "we";
char ch2[] = "are";
char ch3[] = "tougher";
char ch[20];
int i=0, j=0, k=0;
while (ch1[i]!='\0')
{
ch[i] = ch1[i];
i++;
}
while (ch2[j] != '\0')
{
ch[i + j] = ch2[j];
j++;
}
while (ch3[k] != '\0')
{
ch[i + j + k] = ch3[k];
k++;
}
ch[i + j + k] = 0;
printf("%s",ch);
return 0;
}
获取字符串
1.通过scanf函数
include <stdio.h>
int main()
{
char str[100];
scanf("%s",str);
printf("%s\n",str);
return 0;
}
2.通过gets函数
include <stdio.h>
int main()
{
char str[100];
gets(str);
printf("%s\n",str);
return 0;
}
3.通过fgets函数
include <stdio.h>
int main()
{
char str[100];
fgets(str,sizeof(str),stdin);
printf("%s\n",str);
return 0;
}
上述三种方法中:
1.scanf函数不能接收空格,若要用scanf接收空格,则需要通过正则表达式:scanf("[^\n]",str);
2.gets和fgets可以接收空格;
3.fgets不存在缓冲区溢出问题,fgets结尾包含"\n"
输出字符串
1.通过printf函数
include<stdio.h>
int main()
{
char ch[]="hello";
printf("%s\n",ch);
return 0;
}
2.通过puts函数
include<stdio.h>
int main()
{
char ch[]="hello";
puts(ch); //自带换行;一般需要换行可使用puts("");
return 0;
}
3.通过fputs函数
include<stdio.h>
int main()
{
char ch[]="hello";
fputs(ch,stdout);
return 0;
}
字符串长度
strlen()
strlen()计算指定字符串长度,不包含"\n"。
sizeof()计算数组长度,包含"\n"。
include <stdio.h>
int main()
{
char ch[]="hello"
printf("数组大小:%d",sizeof(ch));//结果为6
printf("字符串大小:%d",strlen(ch));//结果为5
return 0;
}