字符串和字符数组
2018-06-02 本文已影响0人
RicherYY
字符串
定义
一个或者多个字符序列称为字符串
例如 “”my heart is still”
双引号不是字符串,仅告诉编译器双引号内的字符为字符串
C语言是用字符数组来存储字符串的
字符串和字符数组的不同点
字符串最后一个元素一定是'\0'
字符串两个特点
1.每个单元就占一个字节
2.最后一位一定是'\0'(空字符)
空字符和0和null完全不是一个概念不要混淆
空字符是字符串的终止符,而null是一个符号,表示不引用任何的内存地址。
int main()
{
//定义字符串的几种方式
//字符串和字符数组的区别;就是最后一位是不是空字符
char name1[] = {'j','a','k','e','\0'};
char name2[5] = "jake";
printf("两个数组所占的空间: %d\n",sizeof(name1));
printf("两个数组所占的空间: %d",sizeof(name2)); //编译器自动加了一个空字符
return 0;
}
结果
数组所占的空间: 5
数组所占的空间: 5
两种方式都可以定义字符串,第二种方式定义了字符串时编译器会自动+1
所以声明字符串数组的时候中括号里的值要多1
char name2[5] = "jake";
printf("请输入新名称:");
scanf("%s",name2);
printf("%s",name2);
scanf的里面%s是接收字符串类型,name2是数组,本身就是一个地址所以不需要加&
补充gets和puts
gets和scanf的用法一模一样,用来动态输入
gets(name2); == scanf("%s",name2);
puts是用来输出录入的值
gets有个问题就是用户输入多少的字符串都能接收,容易产生越界,产生bug
可以使用fgets来代替
fgets的用法
fgets(word1,20,stdin);
里面有三个参数
1.字符数组
2.接收字符的总数
3.从标准输入库里读取
20表示最多读入20-1个字符
注意:fgets会默认给最后一位打印成\n
//测量字符串的长度
int GetsStrLength(char[]);
int GetsStrLength(char str[])
{
int count = 0; //字符串中的字符长度
while(str[count] != '\0') //不确定长度无法使用for给出条件,这个时候可以用while.是\0的情况下是最后一位
{
if (str[count] == '\n')
{
str[count] = '\0'; //直接替换成\0 也能输出正确的值
break;
}
count++;
}
return count;
}
int main()
{
char name1[] = {'j','a','k','e','\0'};
fgets(name1, 5, stdin);
int len = GetsStrLength(name1);
printf("字符串的长度是;%d\n",len);
return 0;
}
abc
字符串的长度是;3