C 语言

字符串和字符数组

2018-06-02  本文已影响0人  RicherYY

字符串

定义

一个或者多个字符序列称为字符串
例如 “”my heart is still”
双引号不是字符串,仅告诉编译器双引号内的字符为字符串
C语言是用字符数组来存储字符串的

字符数组.PNG

字符串和字符数组的不同点

字符串最后一个元素一定是'\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
上一篇下一篇

猜你喜欢

热点阅读