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++]);
    }

  • 相关阅读:
    基于node.js+socket.io+html5实现的斗地主游戏(1)概述
    [javascript]switchTab:仿腾讯首页Tab栏切换js插件
    [js]利用闭包向post回调函数传参数
    [CSS]利用伪元素实现一些特殊图形 from baidu校招
    [javascript]模块化&命名污染—from 编程精解
    [随手记]2014前端面试题解
    [IE bug] ajax请求 304解决方案
    [java]基于UDP的Socket通信Demo
    [JQuery]ScrollMe滚动特效插件
    java.lang.OutOfMemoryError及解决方案
  • 原文地址:https://www.cnblogs.com/Zbtrik/p/3913574.html
Copyright © 2011-2022 走看看