写多了 Java 代码,对 String 类 很是喜爱,可惜经典的 C 语言没有。。。最近在做程序过程中,发现对C语言字符串的处理很模糊,一会儿用数组,一会儿用指针,一会儿又引入 string.h。。。于是决定总结一下C语言中字符串的处理,一则作为笔记,二则作为技术交流和大家分享。

Form:http://hi.baidu.com/rxpeng/item/6bd3ebfbfc025b07c7dc45bb

  1. 字符串字面量(字符串常量,在C标准中称为,字符串字面量)

    如何存储字符串字面量
      从本质上而言,C语言把字符串字面量作为字符数组来处理。当C语言编译器在程序中遇到长度为n的字符串字面量时,它会为字符串字面量分配长度为n+1的内存空间,在末尾增加一个额外的字符——空字符(\0)。

    字符串字面量的操作 
      通常情况下可以在任何C语言允许使用 char * 指针的地方使用字符串字面量。如:

    char*p;
    p ="abc";

    这个赋值操作不是复制 "abc" 中的字符,而仅仅是使 p 指向字符串的第一个字符。

  2. 字符串变量
      一些编程语言为声明字符串提供了特殊的 string 类型。C语言采取了不同的方式:只要保证字符串是以空字符串结尾的,任何一维的字符数组都可以用来存储字符串。如果编写自己的字符串处理函数,请千万注意要正确地处理空字符。
      假设需要变量用来存储最多80个字符的字符串。既然字符串会在末尾处需要空字符,那么要声明的变量是含有81个字符的数组。

    #defineSTR_LEN 80

    /*惯用法 */
    charstr[STR_LEN +1];

    对宏加一的这种方法是C程序员常用的方式。

    初始化字符串变量

    chardate1[8] ="June 14";

    date1: | J | u |  n | e |   | 1 | 4 | \0 |

    chardate2[9] ="June 14";

    date2: | J | u |  n | e |   | 1 | 4 | \0 | \0 |
    大体上来说,这种行为与C语言处理数组初始化的方法一致。
    字符串变量的声明可以忽略它的长度。这种情况下,编译器会自动计算长度:

    chardate3[] ="June 14";

    编译器为date3分配8个字符的空间。
     
    字符数组与字符指针
    一起来比较一下下面两个声明:

    chardate[] ="June 14";

    它声明date是个字符数组。和这个声明相似的是下面这个声明:

    char*date ="June 14";

    它声明date是个指向字符串字面量的指针。
    [注意],不能错误地认为上面两种date可以互换。两者之间有着显著的差异:
    (1) 在声明为数组时,就像任意数组元素一样,可以修改存储在date中的字符。在声明为指针时,date指向字符串字面量。
    (2) 在声明为数组时,date是数组名。在声明为指针时,date是变量,这个变量可以在程序执行期间指向其他字符串。
      
    如果需要可以修改的字符串,那么就要建立字符数组来存储字符串。这时声明指针变量是不够的。下面的声明使编译器为指针变量分配了足够的内存空间:

    char*p;

    可惜的是,它不为字符串分配空间。在使用p作为字符串之前,必须把p指向字符串数组。一种可能是把p指向已经存在的字符串变量:

    charstr[STR_LEN +1], *p;
    =str;

    现在p指向了str的第一个字符,所以可以把p作为字符串使用了。

转载于:https://www.cnblogs.com/Hack-ok/archive/2013/02/07/2908867.html

C语言中字符串的处理方式(一)相关推荐

  1. 在C语言中如何处理字符串,C语言中字符串的处理方式

    <C语言中字符串的处理方式>由会员分享,可在线阅读,更多相关<C语言中字符串的处理方式(4页珍藏版)>请在人人文库网上搜索. 1.C语言中字符串的处理方式"很难从字符 ...

  2. C语言中字符串的处理方式

    http://www.cnblogs.com/robin-ty/archive/2010/09/03/1817294.html 交流纽带" --<C语言程序设计 现代方法> 写多 ...

  3. C语言中字符串赋值处理方式,C语言中字符串赋值处理方式

    C语言中,字符串可以赋值给字符指针变量,或者将字符串用字符数组保存.因为c语言没有直接对字符串提供语法糖方面的支持.而且C标准库很多方法处理字符串是以空字符结尾为前提的,这个必须要记住. char * ...

  4. 在C语言中以编程的方式获取函数名

    在C语言中以编程的方式获取函数名 仅仅为了获取函数名,就在函数体中嵌入硬编码的字符串,这种方法单调乏味还易导致错误,不如看一下怎样使用新的C99特性,在程序运行时获取函数名吧. 对象反射库.调试工具及 ...

  5. C语言中函数参数传递的方式:值传递,地址传递

    ** C语言中函数参数传递的方式:值传递,地址传递 ** 值传递:将实参的值复制至形参的相应存储单元中,实参与形参占用不同存储单元,单向传递 地址传递:使用数组名或者指针作为函数参数,传递的是该数组的 ...

  6. C语言中几种输入方式

    当我们输入一串字符或者数字时,需要一种标志作为输入结束的标志,所以我总结了以下几种: 1.输入一串字符串以回车键作为输入结束的标志 char ch; while(((ch=getchar())!='n ...

  7. C语言中字符串定义与文字常量区

    C语言中字符串定义与文字常量区 C语言的内存组织方式1>代码区,存放可执行代码2>全局存储区,存放所有全局变量和静态变量3>文字常量区,常量字符串4>堆区,malloc,new ...

  8. c语言字符串转成二进制,C语言中字符串如何转换为二进制、八进制、十进制、十六进制...

    在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现 相关函数: atof, atoi, atol, st ...

  9. C语言中字符串结束符

    C语言中字符串结束符'\0' '\0'就是8位的00000000,为字符NULL,因为字符类型中并没有对应的这个字符,所以这么写.'\0'就是字符串结束标志. 1. 字符串变量str[] 在C语言中没 ...

最新文章

  1. 小米正用时序数据库,解决这个“硬核”问题
  2. 数字图像处理基本运算
  3. Centos7 中文乱码切换中英字符
  4. git checkout 单个文件_IntelliJ IDEA下的使用 Git
  5. 在Windows下编译ffmpeg完全手册
  6. centos7配置Docker镜像加速器
  7. 美团差评数据分析,python代码实现
  8. Vue 单页面应用 把公共组件放在 app.vue 但是我希望某个页面没有这些公共组件怎么办???(比如登陆页面)
  9. c语言回溯算法数独,数独回溯算法
  10. Python:井字棋游戏
  11. 千呼万唤始出来,拨“云”终见CASB
  12. 如何使用 Windows 10 自带的磁盘清理程序?
  13. Meltdown:Reading Kernel Memory from User Space 论文中英对照
  14. 如何在完全不懂服务器开发的情况下做一个实时联网对战的微信小游戏
  15. FreeCAD 官方文档 —— 一、 概述
  16. 撒罗满:2019年收集的最佳3D打印模型下载网站
  17. 排球计分规则3.17
  18. 老铁请留步!有奖调查
  19. CrawlSpider爬取拉勾网,解决302问题。
  20. 计算机毕业设计之java+springboot基于vue的生鲜交易系统-生鲜商城网站

热门文章

  1. mysql i o error_警告:mysqli_ERROR()需要精确的一个参数,0给定的错误
  2. 计算机录音机应用程序在哪,windows7如何给电脑录音 windows7录音机在哪
  3. 湖南科技大学计算机学院宿舍,湖南科技大学计算机科学与工程学院
  4. pythonlocust使用方法_python locust 性能测试:locust安装和一些参数介绍
  5. ubuntu中java环境配置_Ubuntu下java环境的搭建
  6. 洛谷回文数c语言,【普及-】洛谷P1015:回文数 一种解法
  7. 水晶报表 mysql_水晶报表CrystalReport2008使用JDBC连接MySQL数据库-详细步骤
  8. Linux学习笔记---网线直连电脑和开发板使用nfs下载文件
  9. dcmtk在PACS开发中的应用(基础篇) 作者:冷家锋 第四章 工作列表(Work List)(二)...
  10. Dcmtk在PACS开发中的应用(基础篇) 第一章 与影像设备互连 作者 冷家锋