zoukankan      html  css  js  c++  java
  • C 字符串数组

    #include <stdio.h>
    #include <stdlib.h>
    
    #define DG "%d\n"
    
    //字符串数组
    int main()
    {
    //长度问题============================
        char arr[]= {"123"}; //定义的是一个字符串
        char arr1[]= {'1','2','3'}; //一个字符数组
    //两者其实是有区别的
    //第一个相当于char arr[]={'1','2','3','\0'};
    
        printf(DG,strlen(arr));//得到3//strlen是计算字串中字符的个数
        printf(DG,sizeof(arr));//得到4
        printf(DG,sizeof(arr1));//得到3
    
    //关于strlen===========================
    //从0号元素开始一直往后直到遇到第一个\0为止
        char arr2[]= {'1','2','3','\0','1','2','3'};
        printf(DG,strlen(arr2));//结果是3//虽然这里实际上有6个字符  但是只统计到前3个
    
    //对于二维数组也是如此
        char arr3[2][3]= {'1','2','3','\0','1','2'};
        printf(DG,strlen(arr2));//结果是3
    
    //定义与初始化问题===============================
        char arr4[4];//ok
    //char arr4[];//wrong
        char arr5[2][3];
    //char arr5[][3];//wrong//定义数组时如果没有初始化 必须指明数组的大小
    
        char arr6[]= {"tyu"};
        char arr7[][2][3]= {"123456qwert"};
    //只有定义同时又初始化了 才能省去第一个[]
    //对于arr7 为什么第一个[]可以省去呢?
    //其实系统知道要对arr7如何分配空间
    //123456qwert有11个字符 那么有12个空间(最后一个是\0)
    //[][2][3]表明一个大组中有两个组 一个组中又有3个人
    //这样计算下来就是有2个大组  所以第一维的数据时可以确定的
    
        char arr8[4]= {'2','3'}; //定义一个size为4的数组//并对前两个元素初始化2和3
        printf(DG,arr8[3]);//未手动初始化的部分为0
        char arr9[4];
        printf(DG,arr9[3]);//这里输出0//char数组有默认值0//因为char本身默认为0 即便是在函数内
        char ch;
        printf(DG,ch);//输出0
    
    //int 数组和int本身一样 函数中的int和int数组是不具备默认值的
        int num[6];
        printf(DG,num[3]);//随机数
    
    //strcpy和strcat问题===========================
        char *t="123";//像这样定义的是字符指针同时又用=初始化的  存储123的这块区域是只读的
        char *str="qwejj";
    //strcpy(t,str);//会报XXXX内存只读的错误
    //strcpy是重写字串1的空间内容 使这里的字符等同于字串2的字符
    //strcpy中有这么一句while ((*strDest++=*strSrc++)!='\0');
    
    //但是这样就ok
        char *t2;
        t2=(char *)malloc(50*sizeof(char));
        strcpy(t2,"dfg");//ok
    
    //如果觉得malloc语句很麻烦
        char t3[20];
        strcpy(t3,str);
        char t4[]="dfghrthrt";
        strcpy(t4,str);
        printf(t4);//qwejj
    
    //假如要被修改的空间定义的大小不够?
        char t5[]="kl";
        strcpy(t5,str);
        printf(t5);//qwejj//正确输出
    
    
    //strcat(t,str);//对于strcat也是如此// *t="123"; 这种定义属于常量
    //同样报 内存只读的错误
        strcat(t2,str);
        strcat(t3,str);
        strcat(t4,str);//ok
    
    
    //gets  puts================================
    
        char *st;
        st=(char *)malloc(50*sizeof(char));
        gets(st);//gets(char *)//所以gets括号中可以使数组名也可以是指针名
    //使用指针名前要记得分配空间
        puts(st);//输出完一句话后会自动换行
    
        char a[20];
        gets(a);//在遇到回车符号结束本次输入//接收到的字符并不包括回车
        printf(a);
        puts(a);
    
        char *st2;
        st2=(char *)malloc(50*sizeof(char));
        scanf("%s",st2);
        printf(st2);//ok
    
        char st3[20];
        scanf("%s",st3);
        puts(st3);//ok
    
    
    }
  • 相关阅读:
    Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
    【提供笔试面试题参考】阿里巴巴,淘宝技术部,针对21届应届生的内推机会
    谈谈我眼中的CSDN吧
    我的2014碎碎念—学习篇、实习篇、工作篇、生活篇
    推荐几款我一直在用的chrome插件(下)
    推荐几款我一直在用的chrome插件(上)
    逛自己的微博,回顾曾经的那个“我”
    Java五道输出易错题解析(避免小错误)
    程序员和产品经理是怎么互相看的?贬低还是赞扬?
    现实中如何评判路遥《人生》中的高加林?
  • 原文地址:https://www.cnblogs.com/cart55free99/p/2964984.html
Copyright © 2011-2022 走看看