zoukankan      html  css  js  c++  java
  • C语言字符和字符串随记

    ==========================
    第11章 字符和字符串函数
    ==========================
    震惊:
    字符串常量属于静态存储类,常量引号中的内容作为指向该字符串存储位置的指针:
    printf("%s, %p, %c ","we","are",*"young!");语句执行的结果如下:
    we, 0x4005e4, y

    字符串的数组声明:
    char str[] = "string A";  <=>  char[] str = {'s','t','r','i','n','g',' ','A',''};
    注意右边的声明最后需要加上‘’标志,如果不加,得到的就是一个字符数组而不是字符串
    但实验证实不加的话,以'%s'的方式仍然能够输出,不会多输出;
    根据上面条件,有下面等式成立:
    str == &str[0],    *str == str[0] =='s',    *(str+1) == str[1] =='t'
    本质仍是数组,所以指针的一套可以用:
    char str[] = "String A!";        <=>    char *ptr = "String A!";
    这个不能进行++str操作,可进行*(str+i)操作      而这个可以进行++str操作,也可进行ptr[i]操作
    本质原因前者是地址常量,后者是指针变量

    数组初始化是从静态存储区把一个字符串复制给数组,而指针初始化只是将字符串的地址赋值给指针变量
    ============================================================
    #include <stdio.h>
    int    main(void)
    {
        char *ptr = "String";
        //ptr[0] = 'A';        //编译器偷懒可能导致String只有一个拷贝,公用品不能单改
        printf("String ");
        printf("%s %s ",ptr,"String");
        return 0;
    }
    ============================================================

    char *str[5]    约等于    char[X][5],两者用法大致相同,但存储原理不同

    gets()函数不会检查输入是否大于分配的存储空间,所以更安全的做法是使用fgets()函数,但也更麻烦。



    不加换行符的puts()代码;
    void putss(const char * string)
    {
        while(*string!='')    //如用while(*string),也可,最简洁,略有不同
            putchar(*string++);
    }

    void putss(const char * string)
    {
        int i = 0;
        while(string[i]!='')
            putchar(string[i++]);
    }

  • 相关阅读:
    六十:权限提升-MY&MS&ORA等SQL数据库提权
    五十九:权限提升-Win溢出漏洞及AT&SC&PS提权
    五十八:权限提升-网站权限后台漏洞地第三方获取
    在kaili装git与git-lfs
    机器学习中的最优化算法总结
    动态规划及意义
    对于中变量与类的使用感想
    安装awvs教程参照
    kali乱码问题
    linux与Mac互相粘贴存在障碍,可以用这个命令联系起来
  • 原文地址:https://www.cnblogs.com/Zbtrik/p/3913574.html
Copyright © 2011-2022 走看看