美文网首页C 语言
字符串和字符数组

字符串和字符数组

作者: RicherYY | 来源:发表于2018-06-02 21:12 被阅读0次

    字符串

    定义

    一个或者多个字符序列称为字符串
    例如 “”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
    

    相关文章

      网友评论

        本文标题:字符串和字符数组

        本文链接:https://www.haomeiwen.com/subject/jfxdsftx.html