• C语言速记5(字符串)


    1,C语言中字符串是字符数组:

    char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', ''};
    或者
    char site[] = "RUNOOB";
    
    注意:
    是null字符,用于终止该字符数组,标记字符串结束。
    写入空字符结束并不是必须,因为编译器初始化会自动加入。
    数组的末尾存储了空字符,
    所以字符数组的大小比单词 RUNOOB 的字符数多一个

    实例:

    #include <stdio.h>
     
    int main ()
    {
       char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', ''};
     
       printf("菜鸟教程: %s
    ", site );
     
       return 0;
    }
    
    执行:
    菜鸟教程: RUNOOB

    可以看成数组名称就是字符串变量。

    总结:字符串就是字符数组,但字符数组并不一定是字符串。

    1,下面两个并不等价:
    char c[] = {'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u',''};
    不等于:
    char c[] = {'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u'};
    字符串都有一个结尾。
    
    但有时候并不需要手动写,编译器自动完成。
    
    下面三种都是等价的:
    char[] = {"I love shiyanlou"};
    可以直接省去花括号:
    char[] = "I love shiyanlou";
    此时数组的长度是 17,而不是 16,因为字符串常量的最后系统自动加了一个 ''char c[] = {'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u',''};
    1,下面两个并不等价:
    char c[] = {'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u',''};
    不等于:
    char c[] = {'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u'};
    字符串都有一个结尾。
    
    但有时候并不需要手动写,编译器自动完成。
    下面三种都是等价的:
    char[] = {"I love shiyanlou"};
    可以直接省去花括号:
    char[] = "I love shiyanlou";
    此时数组的长度是 17,而不是 16,因为字符串常量的最后系统自动加了一个 ''char c[] = {'I',' ','l','o','v','e',' ','s','h','i','y','a','n','l','o','u',''};
    在C语言中,可以用两种方法表示和存放字符串:
    (1)用字符数组存放一个字符串
    char str[ ]=”I love China”;
    (2)用字符指针指向一个字符串
    char* str=”I love China”;
    对于第二种表示方法,有人认为str是一个字符串变量,以为定义时把字符串常量”I love China”直接赋给该字符串变量,这是不对的。
    C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时只是把字符串首地址(即存放字符串的字符数组的首地址)赋给str。
    指针指向数组首字符地址

    关于NULL和‘’的关系:

    NULL表示未赋值,指向0地址。一般32位机器,占用4个字节。
    
    '0'是空字符,占用一个字节,
    字符实际是特定数值的ascii码。
    虽然数值等于初始化为null的变量都是0,但意思不一样。
    
    以上是两者的区别,但有时候又是意思差不多的
    
    char c=NULL 和char c=''
    这个时候是一样。null默认初始化会让c字符值为‘0',
    用==来判断那么他们是值相等的,但是概念来讲是不一样。
    
    字符串是一个特殊字符数组(带’0'结尾),中间不能有空字符,否则可能被截断,编译器只认前半段。
    
    之前想到一个问题:
    那就是字符数组,中间某个元素字符赋值为null是不是值会变成‘0'.
    出现一个警告:
    warning: assignment makes integer from pointer without a cast
    #include
    <stdio.h> void main(){ char c[]="abcdef"; //c[2]=''; c[2]=NULL; printf("%s",c); } 也就是说NULL一般是指针类型,不能随便赋值。 NULL针对指针而言的, 在32位操作系统的内存中的表现就是0x0000 0000 0000 0000 0000 0000 0000 0000,即32位都为0,其值其实为0 所以,有 int i = 0; //让i为NULL char c = ''; //''在内存中的表现也为一串0,等价与0和NULL 个人理解就是数值都是0,但是类型不一样, 比如short和int 同为0值时候, 实际中多数情况可以作为相同判断条件处理

     补充:

    处理中间含有空字符‘’的char型字符串注意的问题

    空字符 空格字符(字符) 空字符串 NULL的区别

    C语言中空格,空字符,字符数组结束符,NULL,空字符串的区别

    2,C语言库提供的一些处理字符串方法:

    #include <stdio.h>
    #include <string.h>
     
    int main ()
    {
       char str1[14] = "runoob";
       char str2[14] = "google";
       char str3[14];
       int  len ;
     
       /* 复制 str1 到 str3 */
       strcpy(str3, str1);
       printf("strcpy( str3, str1) :  %s
    ", str3 );
     
       /* 连接 str1 和 str2 */
       strcat( str1, str2);
       printf("strcat( str1, str2):   %s
    ", str1 );
     
       /* 连接后,str1 的总长度 */
       len = strlen(str1);
       printf("strlen(str1) :  %d
    ", len );
     
       return 0;
    }
    
    输出:
    strcpy( str3, str1) :  runoob
    strcat( str1, str2):   runoobgoogle
    strlen(str1) :  12
  • 相关阅读:
    计算机网络-URL/URI/URN
    计算机网络-应用层之HTTP协议
    计算机网络-传输层-TCP之三次握手/四次握手
    requests之一:HTTP请求 状态码
    python排序中sort()与sorted()的用法与区别
    列表(list)之三 -如何较为均匀的将任意字符串按指定组数分组,方差最少
    列表(list)之二 -运用篇 -快速生成规律性列表
    DES加密解密
    c# json转Dictionary字典
    导出Excel事例
  • 原文地址:https://www.cnblogs.com/straybirds/p/14782193.html
Copyright © 2020-2023  润新知