• C语言tips-字符串数组


    最近因为工作需要开始重新学c语言,越学越发现c语言深不可测,当初用python轻轻松松处理的一些数据,但是c语言写起来却异常的复杂,这个板块就记录一下我的c语言复习之路

    1. 字符串

    字符串是连续的字符序列,最后以空字符’\0’作为终止符。一个字符串的长度指所有字符的数量,但不包括终止符。在 C 语言中,没有字符串类型,自然也就没有运算符以字符串为操作数。

    2. 定义时就初始化初始化

    // 方式一:必须指定第二维的大小,且应大于等于数组最长字符串的长度
    char str_arr1[][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; 
    // 方式二 用指针的方式
    char *str_arr2[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
    
    • 1
    • 2
    • 3
    • 4

    字符串数组char *表示的字符串有什么区别呢?它们最根本的区别是在内存中的存储区域不一样,字符数组存储在全局数据区或栈区,第二种形式的字符串存储在常量区。全局数据区和栈区的字符串(也包括其他数据)有读取和写入的权限,而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限

    3. 手动输入初始化

    • 利用二维数组
        char str_arr[][100];
        int i, j, ch
        for (i = 0; i < sizeof(str_arr)/sizeof(str_arr[0]); i++)
        {
            printf("请输入%d句话:", i+1);
            for (j = 0; (ch = getchar()) != '\n'; j++)
            {
                slogan[i][j] = ch;
            }
            slogan[i][j] = '\0';
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 指针方式
        char *num[5]={""};
        for(int i = 0;i < 5;i++)
        {
            num[i]=(char*)malloc(20);
            scanf("%s",num[i]);
        }
        for(int i = 0; i < 5; i++)
        {
            printf("%s\n", num[i]);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4. 字符串数组的遍历

    #include 
    #include 
    int main()
    {
        // 方式一:必须指定第二维的大小,且应大于等于数组最长字符串的长度
        char str_arr1[][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
        printf("方式一遍历:");
        printf("%d", sizeof(str_arr1));
        for(int i = 0; i < sizeof(str_arr1)/sizeof(str_arr1[0]); i++)
        {
            printf("%s ", str_arr1[i]);
        }
        printf("\n");
        // 方式二
        char *str_arr2[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
        printf("方式二遍历:");
        for(int i = 0; i < sizeof(str_arr2)/sizeof(str_arr2[0]); i++)
        {
            printf("%s ", str_arr1[i]);
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    遍历比较简单,就数组取值就行,但我还在一个博客上看到另外一种方式,即在字符串数组最后去赋值一个NULL,代码如下

    char *str_arr2[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", NULL};
    char **str = str_arr2;
    while (*str != NULL)
    {
        printf("%s\n", *str++);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    可以看到c语言的字符串数组里面的东西还是非常多的,以上就是字符串数组的一些理解和记录
    参考文章:
    https://zhuanlan.zhihu.com/p/377633216
    http://c.biancheng.net/view/1829.html

  • 相关阅读:
    第二十九章 目标检测中的测试模型评价指标(车道线感知)
    SQL Server 2014主从数据库订阅和发布(SQLserver复制)超详细
    Web压测工具http_load原理分析
    C语言---指针
    软件测试 —— 常见的自动化测试架构!
    【哈希表】算法例题
    基于STM32+OneNet设计的物联网智能鱼缸(2023升级版)
    SpringBoot+PageHelper+Vue+Element从零开始实现分页功能(包含前后端源码)
    天玑9000盘活联发科高端市场增长,天玑9200有望站稳旗舰继续破局
    Zookeeper几种应用
  • 原文地址:https://blog.csdn.net/weixin_46187354/article/details/127967059