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

    字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符一个字符地赋值了。请看下面的例子:

    1. char str[7];
    2. str = "abc123"; //错误
    3. //正确
    4. str[0] = 'a'; str[1] = 'b'; str[2] = 'c';

       str[3] = '1'; str[4] = '2'; str[5] = '3';

    在C语言中,字符串总是以''作为结尾,所以''也被称为字符串结束标志,或者字符串结束符。

    ''是 ASCII 码表中的第 0 个字符,英文称为 NUL,中文称为“空字符”。该字符既不能显示,也没有控制功能,输出该字符不会有任何效果,它在C语言中唯一的作用就是作为字符串结束标志。

    C语言在处理字符串时,会从前往后逐个扫描字符,一旦遇到''就认为到达了字符串的末尾,就结束处理。''至关重要,没有''就意味着永远也到达不了字符串的结尾。

    " "包围的字符串会自动在末尾添加''。例如,"abc123"从表面看起来只包含了 6 个字符,其实不然,C语言会在最后隐式地添加一个'',这个过程是在后台默默地进行的,所以我们感受不到。

    下图演示了"C program"在内存中的存储情形:


    需要注意的是,逐个字符地给数组赋值并不会自动添加'',例如:

    1. char str[] = {'a', 'b', 'c'};

    数组 str 的长度为 3,而不是 4,因为最后没有''

    当用字符数组存储字符串时,要特别注意'',要为''留个位置;这意味着,字符数组的长度至少要比字符串的长度大 1。请看下面的例子:

    1. char str[7] = "abc123";

    "abc123"看起来只包含了 6 个字符,我们却将 str 的长度定义为 7,就是为了能够容纳最后的''。如果将 str 的长度定义为 6,它就无法容纳''了。

    当字符串长度大于数组长度时,有些较老或者不严格的编译器并不会报错,甚至连警告都没有,这就为以后的错误埋下了伏笔

    scanf() 的用法还可以更加复杂和灵活,它不但可以完全替代 gets() 读取一整行字符串,而且比 gets() 的功能更加强大。比如,以下功能都是 gets() 不具备的:

    • scanf() 可以控制读取字符的数目;
    • scanf() 可以只读取指定的字符;
    • scanf() 可以不读取某些字符;
    • scanf() 可以把读取到的字符丢弃。
    天涯犹在,不诉薄凉。
  • 相关阅读:
    【2018.10.3】万圣节的快递
    【2018.10.3】万圣节的入场券
    【2018.10.2】纸条
    【2018.10.2】菌落合并
    【2018.10.2】Note of CXM
    【2018.10.1】【JSOI2016】最佳团体(bzoj4753)
    【2018.10.1】「JOI 2014 Final」年轮蛋糕
    【2018.9.26】K-D Tree详解
    Python中的numpy模块解析
    Python中xlrd模块解析
  • 原文地址:https://www.cnblogs.com/Knight02/p/14145975.html
Copyright © 2011-2022 走看看