码迷,mamicode.com
首页 > 其他好文 > 详细

字符串(一)

时间:2016-08-17 09:00:44      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

本文目标:

    讨论一下C语言中的字符串。

基本概念:

    字符串是一种重要的数据类型,但是C语言并没有显式的字符串数据类型,因为字符串以字符串常量的形式出现或者存储于字符数组中。

    字符串是一串零个或多个字符,并且以一位模式为全0的 NUL 字节结尾。

示例:

1     char  szStr0[] = "Oogway";  /// 将一个 字符串 赋值给一个数组
2     char  szStr1[7] = "Oogway";
3     char  szStr2[10] = "Oogway";
4     char  szStr3[6] = "Oogway";   ///// 不合法的赋值操作,因为"Oogway"占7个字节空间,而字符数组szStr3只分配了6个字符空间。
5     char szStr4[7] = { O, o, g, w, a, y, \0 };
6     char szStr5[6] = { O, o, g, w, a, y };  /////只是一个字符数组,不是一个字符串。因为它没有字符结束标志。

技术分享

 以szStr2 为例来说明

sizeof(szStr2) 结果为 10

strlen(szStr2) 结果为 6

szStr2中"Oogway"字符串占用了 7 个字节的空间;

回顾一下:

1.一个长度为N个字节的字符串赋给数组的时候,需要为它准备N+1个字节的内存空间;

2.字符串存储于数组中时,必须以 ‘\0‘结尾(‘\0‘ 就是 将那一位 赋值为 0)。为什么要重点强调这点,是因为 实际工作中,经常遇到 没有以‘\0‘结尾的情况,导致得到的字符数组越界。这种bug出现的频率还是蛮高的。(为什么会有没有以‘\0‘结尾的情况?这种问题,大多出现在 memcpy或者 sprintf , strcpy 的时候,后面的关于“字符串”的文章会讨论这几个函数)

3.strlen计算数组长度的时候,没有计算 末尾的 ‘\0‘ 字符;例如,szStr2的 字符串长度是 6

4.字符串所占用的内存空间是 字符串长度+1 ,例如 "Oogway"字符串长度是6,但必须给它分配 7 个字节的空间,才能装的下这个字符串。szStr2拥有10个字节的内存空间,能装得下这个字符数组。

 

字符串(一)

标签:

原文地址:http://www.cnblogs.com/MasterOogway/p/5778554.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!