• 【字符串】字符数组和字符串区别详解


    C 语言中并不存在字符串这个数据类型,而是使用字符数组来保存字符串。那么,字符数组就一定是字符串吗?

    对于这个问题,大多教科书中的回答是“是”。其实不然,字符数组和字符串是完全不相同的两个概念,千万不要混淆。分析如下所示的示例代码。

     1 #include <stdio.h>
     2 #include <string.h>
     3 int main(void)
     4 {
     5     /*字符数组赋初值*/
     6     char cArr[] = {'I','L','O','V','E','C'};
     7     /*字符串赋初值*/
     8     char sArr[] = "ILOVEC";
     9     /*用sizeof()求长度*/
    10     printf("cArr的长度=%d
    ", sizeof(cArr));
    11     printf("sArr的长度=%d
    ", sizeof(sArr));
    12     /*用strlen()求长度*/
    13     printf("cArr的长度=%d
    ", strlen(cArr));
    14     printf("sArr的长度=%d
    ", strlen(sArr));
    15     /*用printf的%s打印内容*/
    16     printf("cArr的内容=%s
    ", cArr);
    17     printf("sArr的内容=%s
    ", sArr);
    18     return 0;
    19 }

    从代码及其运行结果中可以看出如下几点。

    首先,从概念上讲,cArr 是一个字符数组,而 sArr 是一个字符串。因此,对于 sArr,编译时会自动在末尾增加一个 null 字符(也就是'',用十六进制表示为 0x00);而对于 cArr,则不会自动增加任何东西。

    记住,这里的 sArr 必须是“char sArr[7]="ILOVEC"”,而不能够是“char sArr[6]="ILOVEC"”。

    其次,“sizeof()”运算符求的是字符数组的长度,而不是字符串长度。因此,对于“sizeof(cArr)”,其运行结果为 6;而对于 sizeof(sArr),其运行结果为 7(之所以为 7,是因为 sArr 是一个字符串,编译时会自动在末尾增加一个 null 字符)。因此,对于以下代码:
    1 /*字符数组赋初值*/
    2 char cArr[] = {'I''L''O''V''E''C'};
    3 /*字符串赋初值*/
    4 char sArr[] = "ILOVEC";

    也可以写成如下等价形式:

    1 /*字符数组赋初值*/
    2 char cArr[6] = {'I''L''O''V''E''C'};
    3 /*字符串赋初值*/
    4 char sArr[7] = "ILOVEC";

    最后,对于字符串 sArr,可以直接使用 printf 的 %s 打印其内容;而对字符数组,很显然使用 printf 的 %s 打印其内容是不合适的。

    通过对以上代码的分析,现在我们可以很简单地得出字符数组和字符串二者之间的区别:
    • 对于字符数组,其长度是固定的,其中任何一个数组元素都可以为 null 字符。因此,字符数组不一定是字符串。
    • 对于字符串,它必须以 null 结尾,其后的字符不属于该字符串。字符串一定是字符数组,它是最后一个字符为 null 字符的字符数组。

       

     

  • 相关阅读:
    ASP.NET常见安全缺陷集锦[转]
    林黛玉出家:给予中国给予我们的警示![摘]
    关于管理 关于经营 还有很多东西都无从做好
    ASP.NET 2.0的新增服务、控件与功能
    将可视的DataGrid、DataList等的规范表数据导出并写入xls或doc格式保存
    2006全球最具影响力品牌
    .NET环境下水晶报表使用总结[转]
    Asp.net(C#)分层——基础类
    Asp.Net传参方式小结
    MSN签名都成了广告位
  • 原文地址:https://www.cnblogs.com/Luthais/p/10218834.html
Copyright © 2020-2023  润新知